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 ;