Telechargé par Mahamat Nour Mahamoud Daoud

examen-bdr-2019-2020-session1-correction

publicité
Année universitaire 2019/2020
Site :
 Luminy
 St-Charles
 St-Jérôme
 Cht-Gombert
Sujet session de :  1er semestre -  2ème semestre - Session 2
Examen de : L1/L2/L3 - M1/M2 -  LP -  DU
Code Apogée du module : SIN3U04T
 Aix-Montperrin
 Aubagne-SATIS
Durée de l’épreuve : 2h
Nom diplôme : Licence d’informatique
Libellé du module : Bases de données relationnelles
Document autorisé :  OUI -  NON
Calculatrices autorisées :  OUI -  NON
EXAMEN
Exercice 1
On s'intéresse à une base de données qui décrit la gestion de projets relatifs au développement de logiciels.
Les schémas suivants sont utilisés pour regrouper les différentes données :
DEVELOPPEUR (NumDev, NomDev, PrenomDev, AdrDev, EmailDev, TelDev)
PROJET (NumProj, TitreProj, DateDeb, DateFin, ChefProjet)
LOGICIEL (CodLog, NomLog, PrixLog, NumProj)
REALISATION (CodLog, NumDev)
PARTICIPE (NumProj, NumDev)
La relation DEVELOPPEUR donne pour chaque développeur son numéro, nom, prénom, adresse postale,
adresse mail (EmailDev) et son téléphone (TelDev). La relation PROJET donne le numéro d’un projet, son
titre, une date de début et une date de fin ainsi que le numéro du développeur qui est le chef du projet. La
relation LOGICIEL donne le code d’un logiciel (CodLog), son nom, son prix et le numéro du projet auquel il
appartient. La relation REALISATION renseigne le logiciel ainsi que le développeur qui l’a réalisé. La
relation PARTICIPE donne le numéro du projet ainsi que le développeur qui participe à ce projet.
Remarques :
- L’absence de valeur est interdite sur tous les attributs.
- Les attributs ayant même nom qu'une clef primaire référencent cette clef (conformément au principe
d'intégrité de référence).
Question 1 (3 points) : Algèbre relationnelle
En utilisant les opérateurs relationnels, exprimez les requêtes suivantes :
1) Donner les numéros et les titres des projets.
REPONSE = PROJET [numProj, TitreProj]
(projection)
2) Donner le numéro des développeurs qui ont réalisé le logiciel numéro 101.
R1 = (REALISATION : codeLog=101)
(sélection)
REPONSE = R1[numDev]
(projection)
3) Donner les codes des logiciels dont le prix est supérieur à 200 et appartement au projet numéro 10.
R1 = (LOGICIEL : PrixLog > 200 et NumProj=10)
(sélection)
REPONSE = R1[codLog]
(projection)
4) Donner les caractéristiques des développeurs qui ne participent à aucun projet.
R1 = PARTICIPE[NumDev]
(projection)
R2 = DEVELOPPEUR[NumDev] - R1
(différence)
REPONSE = DEVELOPPEUR * R2
(produit)
5) Donner les noms des logiciels qui ont été réalisés par le développeur 'D20'.
R1 = (REALISATION : numDev= 'D20')
(sélection)
R2= [CodLog]
(projection)
R3 = LOGICIEL * R2
(produit)
REPONSE = R3[NomLog]
(projection)
Question 2 (7 points) : Requêtes SQL
Exprimez en SQL les requêtes suivantes :
1) Les codes des logiciels appartenant au projet numéro 101.
SELECT CodeLog
FROM LOGICIEL
WHERE NumProj=101 ;
2) Le nombre de logiciels réalisés par le développeur «D20»
SELECT count(CodLog) as nbreP
FROM REALISATION
WHERE numDev='D20';
3) Les numéros des développeurs qui n’ont pas réalisé de logiciels
SELECT numDev
FROM DEVELOPPEUR
WHERE numDev NOT IN (SELECT DISTINCT numDev FROM REALISATION);
4) La durée des projets gérés par le développeur numéro «D20»
SELECT NumProj, (dateFin- DateDeb) as Durée
FROM Projet
WHERE ChefProjet=’D20’;
5) Le total des prix des logiciels du projet numéro 101. Lors de l’affichage, le titre de la colonne sera «
cout total du projet »
SELECT SUM (PrixLog) as "cout total du projet"
FROM Logiciel
WHERE NumPRoj =101;
6) Les noms et les prix des logiciels appartenant au projet ayant comme titre « gestion de commandes »,
triés dans l’ordre décroissant des prix.
SELECT L.NomLog , L.PrixLog
FROM Logiciel L INNER JOIN Projet P
ON L.NumProj =P.NumProj
WHERE P.TitreProj ='gestion de commandes'
ORDER BY L.PrixLog DESC
7) Les numéros et titres des projets qui ont plus que 5 logiciels
SELECT P.NumProj, TitreProj
FROM PRojet P INNER JOIN Logiciel L ON P.NumProj=L.NumProj
GROUP BY P.NumProj
HAVING count(*)>5
8) Les numéros et noms des développeurs qui ont participé à tous les projets.
SELECT D.NumDev , NomDev
FROM Developpeur D INNER JOIN Participe R ON D.NumDev =R.NumDev
GROUP BY D.NumDev
HAVING count(*)=( SELECT COUNT (*) FROM Projet )
Question 3 (5 points) : Modélisation conceptuelle
Donnez le MCD (modèle conceptuel des données) de ce domaine. Vous prendrez comme dictionnaire
l’ensemble des attributs.
Exercice 2 (5 points) : Normalité et Décomposition
Soit le schéma SR({A, B, C, D, E, F, G, H, I, J }, F ) où F est l’ensemble de dépendances fonctionnelles
suivant :
F = { A,B->C; A->D,E; B->F; F->G,H; D->I,J }
Question 1 : Trouvez la clef de ce schéma.
Clef : {A,B}
Question 2 : Indiquez la normalité de SR. Justifiez votre réponse.
SR n’est pas en 2NF car A -> D, E et A est partie de clef et D est non-clef
Question 3 : Montrez que la DF A,F->J est déductible de F .
On calcule la fermeture de {AF}+F = {A,F,D,E,I,J} et cette fermeture contient bien {J}. Donc A,F->J est
déductible de F
Question 4: Donnez une décomposition qui élimine le plus possible les redondances tout en préservant les DF.
Indiquez la normalité des composantes de cette décomposition. Précisez les clefs de chaque relation obtenue.
L’ensemble des DF est une couverture minimale.
On obtient les schémas suivants :
SR1({A,B,C}, { A,B->C })=> BCNF
SR2({A,D,E}, { A->D,E })=> BCNF
SR3({B,F}, { B->F })=> BCNF
SR4({F,G,H}, { F->G,H })=> BCNF
SR5({D,I,J}, { D->I,J })=> BCNF
Téléchargement