Corrigé du contrôle 2 pour les EI 06/07

Institut National des Télécommunications

Contrôle des connaissances


Bases de données

Code : BD21

Date : 12/01/2007

Durée : 1h30

Coordonnateur : 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 : 5 points (Q1 = 5 pts)

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

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

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

Question 5 : 2 points (Q5.1 = 1 pt, Q5.2 = 1 pt)
Afin de réaliser un site Web sur les planètes et astres de notre galaxie, on a
créé une base de données qui permet de stocker des informations diverses les
concernant. Pour cela, le schéma de base de données suivant est défini :

Astre (nomAstre,
diamètre)

Planète (nomAstre,nomPlanete, diamètre, masse, tempsRevolution)

Astrophysicien (nom, prenom, pays)

Astéroïde (nomAstéroïde,
masse, nom, prenom)

Collision (nomAstre,
nomPlanete, nomAsteroide
,
date)

 

Astre (nomAstre,
diamètre) : un astre (par exemple le soleil) est identifié par un nom et
caractérisé par un diamètre.

Planète (nomAstre,
nomPlanete
, diamètre, masse, tempsRévolution) :
une planète (par exemple la terre) est identifiée par un nom et le nom de l’astre
autour duquel elle tourne. Elle est caractérisée par un diamètre, une masse et
son temps de révolution, c’est-à-dire, le temps mis pour faire le tour de
l’astre autour duquel elle est en rotation. Par exemple, la terre met 365 jours
environ pour faire le tour du soleil. L’attribut nomAstre
est une clé étrangère sur la relation Astre.

Astrophysicien (nom, prenom,
pays) : un astrophysicien est identifié par un nom et un prénom. Il est
caractérisé par un pays d’origine.

Astéroïde (nomAsteroide,
masse, nom, prenom) : un astéroïde est
identifié par un nom et caractérisé par une masse et le nom et le prénom de
l’astrophysicien qu’il l’a découvert. nom et prénom constituent une clé étrangère sur la relation Astrophysicien.

Collision (nomAstre,
nomPlanète, nomAstéroïde
,
date) : une collusion est identifiée par le nom d’une planète (nomPlanète), le nom de l’astre autour duquel la planète
tourne (nomAstre) et le nom d’un astéroïde (nomAstéroïde). Elle est caractérisée par la date de
collusion.  nomAstre et
nomPlanète constituent une clé étrangère sur la
relation Planète et nomAstéroïde est une clé
étrangère sur la relation Astéroïde.

 

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 ou
sous forme textuelle), et d'autre part en SQL.

(Q2.1) Quels sont les
astres (nomAstre et diamètre) dont le diamètre
dépasse 1 million de kilomètre ?

Corrigé :

                  
SELECT nomAstre, diamètre

                  
FROM Astre

                  
WHERE diamètre >=1 000 000

 

(Q2.2) Quelles sont les
planètes (nomPlanète) qui tournent autour de l’astre
soleil et dont le temps de révolution dépasse 500 jours?

Corrigé :

                  
SELECT nomPlanète

                  
FROM Astre A, Planète P

                  
WHERE A.nomAstre = P.nomPlanète
AND tempsRévolution >= 500

 

Question 3

Exprimer les 2 questions suivantes en SQL :

(Q3.1) Pour chaque astrophysicien,
donner son prénom, son nom et le nombre d’astéroïdes qu’il a découvert.

Corrigé :

SELECT prenom,
nom, count (DISTINCT nomAstéroïde)

                  
FROM Astéroïde

                  
GROUP BY prenom, nom

 

(Q3.2) Quels sont les
astres possédant le maximum de planètes ?

Corrigé :

                  
SELECT nomAstre

                  
FROM Planète

                  
GROUP BY nomAstre

                  
HAVING count (*) >= ALL (SELECT count (*)

                                                                 
    
FROM Planète

                                                                 
     GROUP BY nomAstre)

(Q3.3) Quels sont les
astrophysiciens qui n’ont découvert aucun astéroïde ?

Corrigé :

 

               
SELECT prenom, nom

               
FROM Astrophysicien

               
MINUS

               
SELECT prenom, nom

               
FROM Asteroide

 

Question 4

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

(Q4.1) Quelles sont les
planètes qui sont concernées par le maximum de collusions possibles ?

 Corrigé :

SELECT nomPlanète,
nomAstre

                  
FROM Collusion

                  
GROUP BY nomPlanète, nomAstre

                  
HAVING count(*) >= ALL (SELECT count (*)

                                                  
                  
FROM
Collusion                                            

                                                                 
     GROUP BY nomPlanète, nomAstre)

 

(Q4.2) Quels sont les
astres (nomAstre) dont toutes les planètes sont
concernées par des collusions.

Corrigé :

                  
SELECT P.nomAstre

                  
FROM Planete P

                  
GROUP BY P.nomAstre

                  
HAVING count(DISTINCT P.nomPlanete)
= (SELECT count(nomPlanète)

FROM Collusion C

WHERE P.nomAstre
= C.nomAstre)

 

Question 5

(Q5.1) Ecrire la requête
SQL de création de la relation Astre. Vous considérerez pour cela que
l’attribut nomAstre est
une chaîne de 16 caractères
et l’attribut diamètre est un réel positif.

 Corrigé :

CREATE
TABLE Astre (nomAstre VARCHAR(16) PRIMARY KEY diametre
NUMBER)

 

(Q5.1) Ecrire l’ordre SQL
d’insertion du tuple ( ‘Soleil’, 1392530) dans la
relation Astre

 Corrigé :

INSERT INTO
Astre VALUES (‘Soleil’, 1392530)