Tutoriel de Bases de Données Relationnelles

Tutoriel de Bases de Données Relationnelles

Accueil  > Supports pédagogiques > Annales > Ingénieurs > EI 10 corrigé

Corrigé du controle pour les EI 10/11

Institut TELECOM ; TELECOM SudParis

Contrôle des connaissances





Bases de données

Code : CSC4001

Date : 09/11/2010

Durée : 1h30

Contrôle proposé par Samir Tata

Documents autorisés: ceux distribués en cours

 

____________________________________________________

Avertissements

1/ Lisez attentivement le sujet.

2/ Les questions sont indépendantes les unes des autres.

3/ Essayez d'être clair et précis dans vos réponses.

4/ Soignez la présentation, dans la mesure du possible.

5/ Barème indicatif

Question 1 : 4 points (Q1 = 4 pts)

Question 2 : 3 points (Q2.1 = 1 pt, Q2.2 = 1 pt, Q2.3 = 1 pts)

Question 3 : 6 points (Q3.1 = 2 pts, Q3.2 = 2 pts, Q3.3 = 2 pt)

Question 4 : 5 points (Q4.1 = 2 pts, Q4.2 = 3 pts)

Question 5 : 2 points

 

La fédération internationale de Football souhaite mettre en place une base de données pour gérer les informations concernant les mondiaux de football. Pour cela, on a défini le schéma relationnel suivant :

                Pays (pays, continent)

                Joueur (nom, prenom, pays, datenaissance)

                Mondial (annee, paysOrganisateur)

                ParticipationEquipe (pays, annee, groupe, entraineur, classement)

                ParticipationJoueur (nom, prenom, pays, annee, poste)

Les clés sont soulignées et les clés étrangères sont en gras.

La sémantique des diverses relations est la suivante :

Pays (pays, continent) : un pays est identifié par son nom (l’attribut pays) et caractérisé par un continent.

Joueur (nom, prenom, pays, datenaissance) : un joueur est identifié par un nom, un prénom et un pays. Il est caractérisé par une date de naissance. L’attribut pays est une clé étrangère qui référence la relation Pays.

Mondial (annee, paysOrganisateur) : un mondial est identifié par l’année de son organisation et caractérisé par le pays organisateur. L’attribut paysOrganisateur est une clé étrangère qui référence la relation Pays.

ParticipationEquipe (pays, annee, groupe, entraineur, classement) : la participation d’une équipe dans un mondial est identifiée par le pays que cette équipe représente et l’année du mondial. Elle est caractérisée par un groupe, un entraineur et un classement à l’issue du mondial en question. L’attribut pays est une clé étrangère qui référence la relation Pays. L’attribut année est une clé étrangère qui référence la relation Mondial.

ParticipationJoueur (nom, prenom, pays, annee, poste) : la participation d’un joueur dans un mondial est identifiée par son nom, son prénom, son pays et l’année du mondial. Elle est caractérisée par le poste (par exemple gardien ou défenseur) occupé par ce joueur pendant ce mondial. Les attributs nom, prenom et pays constituent une clé étrangère qui référence la relation Joueur. L’attribut annee est une clé étrangère qui référence la relation Mondial.

Question 1

En vous aidant des règles de passage d'une modélisation Entité/association à une modélisation relationnelle "à l'envers", proposer un schéma Entité/Association équivalent à ce schéma relationnel. Ce schéma devra comporter la description des entités (avec leurs propriétés), des entités faibles (s'il y a lieu), des associations (avec leurs propriétés) ainsi que les cardinalités minimum et maximum des associations binaires.

Corrigé

Question 2

Exprimer chacune des 3 questions suivantes, d'une part en algèbre relationnelle sous la forme d'un arbre algébrique, et d'autre part en SQL.

(Q2.1) Quels sont les pays qui ont organisé au moins un mondial ?

Corrigé :

SELECT paysOrganisateur

FROM Mondial

 

(Q2.2) Quelles sont les équipes nationales qui ont participé au mondial de 1998 ? Donnez leurs noms, leurs entraineurs et leurs classements dans ce mondial.

Corrigé :

SELECT pays, entreneur, classement

FROM ParticipationEquipe

WHERE annee = 1998

(Q2.3) Quel sont les joueurs (nom, prénom et pays) qui ont participé à un mondial organisé en France ?

Corrigé :

SELECT nom, prenom, pays

FROM ParticipationJoueur P, Mondial M.

WHERE M.payOrganisateur= "France" AND M.annee=P.annee

 

Question 3

Exprimer les 3 questions suivantes en SQL :

(Q3.1) Pour chaque entraineur, donner le nom et le nombre de participations dans des mondiaux.

Corrigé :

SELECT entraineur, count(*)

FROM ParticipationEquipe P

GROUP BY entraineur

(Q3.2) Donner le(s) entraineur(s) qui a (ont) dirigé le maximum d’équipes (différentes)

Corrigé :

SELECT entraineur

FROM ParticipationEquipe P

GROUP BY entraineur

HAVING count(*) >= ALL (

                                                                SELECT count(*)

FROM ParticipationEquipe P

GROUP BY entraineur

  )

Ou

SELECT entraineur

FROM ParticipationEquipe P

GROUP BY entraineur

HAVING count(distinct pays) >= ALL (

                                                                SELECT count(distinct pays)

FROM ParticipationEquipe P

GROUP BY entraineur

  )

 

(Q3.3) Donner le(s) joueur(s) qui ont occupé au moins deux postes différents dans deux mondiaux différents ?

Corrigé :

SELECT J1.nom, J1.prenom, J1.pays

FROM ParticipationJoueur J1, ParticipationJoueur J2

WHERE J1.poste<>J2.poste AND J1.nom=J2.nom AND J1.prenom=J2.prenom AND J1.pays=J2.pays AND J1.annee <> J2.annee

Ou

SELECT nom, prenom, pays

FROM ParticipationJoueur J

GROUP BY nom, prenom, pays

HAVING count (distinct poste) >=2

Question 4

Exprimer les 2 questions suivantes en algèbre relationnelle ou en SQL :

(Q4.1) Quelles sont les équipes qui n’ont jamais participé à un mondial ?

Corrigé :

SELECT pays

FROM Pays

MINUS

SELECT pays

FROM ParticipationEquipe

 

(Q4.2) Quels sont les pays qui ont participé à tous les mondiaux ?

Corrigé :

SELECT pays

FROM ParticipationEquipe

GROUP BY pays

HAVING count(annee) = (

                                                                SELECT count(*)

FROM Mondial

                                                                )

Question 5

Donner la requête SQL de création de la relation ParticipationJoueur sachant que

-       Les attributs nom, prenom, pays, et poste sont des chaînes de 50 caractères,

-       L’attribut annee est un entier supérieur à 1900,

-       les valeurs possibles de l’attribut poste sont gardien, défenseur, milieu et attaquant,

-       La clé de la relation ParticipationJoueur est composée par les attributs nom, prenom, pays et annee,

-       Les attributs nom, prenom et pays constituent une clé étrangère qui référence la relation Joueur. L’attribut annee est une clé étrangère qui référence la relation Mondial.

 

Corrigé :

CREATE table ParticipationJoueur (

                                                                                nom VARCHAR(50),

                                                                                prenom VARCHAR(50),

                                                                                pyas VARCHAR(50),

                                                                                annee     INTEGER,

                                                                                poste VARCHAR(50),

                                                                )

ALTER TABLE ParticipationJoueur

                ADD CONSTRAINT Cannee CHECK (annee>1900);

 

ALTER TABLE ParticipationJoueur

                ADD CONSTRAINT Cposte CHECK (poste IN

                (‘gardien’, ‘défenseur’, ‘milieu’ , ‘attaquant’)) ;

 

ALTER TABLE ParticipationJoueur

                ADD PRIMARY KEY (nom, prenom, pays, annee) ;

 

ALTER TABLE ParticipationJoueur

ADD CONSTRAINT refannee  FOREIGN KEY (annee)

                REFERENCES

                Mondial(annee) ON DELETE CASCADE ;

 

ALTER TABLE ParticipationJoueur

ADD CONSTRAINT refnomprenompays  FOREIGN KEY (nom, prenom, pays)

                REFERENCES

                Joueur(nom, prenom, pays) ON DELETE CASCADE ;

[fil RSS du site]
Dernière mise à jour : 13/09/2011