Vous êtes sur la page 1sur 6

Anne Universitaire 2009/2010 Session 1 de Printemps

CSB4 & CSB6 INF 159, Bases de donnes preuve : INF 159 EX Date : Jeudi 6 mai 2010 Heure : 8 heures 30 Documents : non autoriss preuve de M. Alain Griffault
PARCOURS : UE :

Dure :

1 heure 30

DISVE Licence

SUJET + CORRIGE
Avertissement
    La plupart des questions sont indpendantes. Le barme total est de 23 points car le sujet est assez long. Le barme de chaque question est (approximativement) proportionnel sa dicult. L'espace pour rpondre est susant (sauf si vous l'utilisez comme brouillon, ce qui est fortement dconseill).

Exercice 1 (SQL et normalisation (16 points))

L'exercice porte sur une gestion simplie de groupes d'tudiants et d'enseignants. Chaque anne universitaire, un tudiant est plac dans un groupe qui pour une matire donne, a un professeur unique. Les professeurs n'interviennent que dans une seule matire tout au long de leur carrire. Soit la relation   

Cours (Annee, Etudiant, Groupe, Professeur, Matiere) et ses dpendances fonctionnelles : {Annee, Etudiant} {Groupe} qui indique que chaque anne, un tudiant appartient un seul groupe. {Groupe, Matiere} {Professeur} qui indique qu'un seul professeur est aect un groupe pour une
matire donne.

{Professeur} {Matiere}

qui indique qu'un professeur n'enseigne qu'une seule matire.

Question 1.1 (1 point)


les

Professeur

Aprs en avoir donn une criture algbrique, crire une requte SQL qui caractrise

ayant travaill en 2007-2008 pour le groupe CSB6A12.

Rponse :

[Professeur]( [Annee = 2007-2008 Groupe = CSB6A12](Cours))

-- les SELECT FROM WHERE AND


les

Professeur ayant travaill en '2007-2008' pour le groupe 'CSB6A12'. Professeur Cours Annee = '2007-2008' Groupe = 'CSB6A12';
Aprs en avoir donn une criture algbrique, crire une requte SQL qui caractrise ayant enseign dans au moins deux

Question 1.2 (1 point)

Professeur

Groupe

dirents pour un mme

Etudiant.

Rponse :

[C1.Professeur]( [ C1.Professeur = C2.Professeur C1.Etudiant = C2.Etudiant C1.Groupe = C2.Groupe ]([Cours :C1] [Cours :C2]))

-- Algebre relationnelle SELECT DISTINCT C1.Professeur FROM Cours AS C1, Cours AS C2 WHERE C1.Professeur = C2.Professeur AND C1.Etudiant = C2.Etudiant AND C1.Groupe <> C2.Groupe; -- Calcul relationnel
1/ 6

INF 159 : Bases de donnes

Session 1, Anne 2009/2010

SELECT DISTINCT Professeur FROM Cours AS C1 WHERE EXISTS (SELECT * FROM Cours AS C2 WHERE C1.Professeur = C2.Professeur AND C1.Etudiant = C2.Etudiant AND C1.Groupe <> C2.Groupe); -- Calcul relationnel SELECT DISTINCT Professeur FROM Cours AS C1 WHERE NOT (Groupe = ALL (SELECT Groupe FROM Cours AS C2 WHERE C1.Professeur = C2.Professeur AND C1.Etudiant = C2.Etudiant)); -- Utilisation des agregas SELECT DISTINCT Professeur, COUNT(Groupe) FROM (SELECT DISTINCT Professeur, Etudiant, Groupe FROM Cours) AS R GROUP BY Professeur, Etudiant HAVING COUNT(Groupe) > 1;
Question 1.3 (1 point)
au moins deux
Rponse :

Annee

crire une requte SQL qui caractrise les

Etudiant ayant travaill la mme Matiere

direntes.

-- Algebre relationnelle SELECT DISTINCT C1.Etudiant FROM Cours AS C1, Cours AS C2 WHERE C1.Etudiant = C2.Etudiant AND C1.Matiere = C2.Matiere AND C1.Annee <> C2.Annee; -- Calcul relationnel SELECT DISTINCT Etudiant FROM Cours AS C1 WHERE EXISTS (SELECT * FROM Cours AS C2 WHERE C1.Etudiant = C2.Etudiant AND C1.Matiere = C2.Matiere AND C1.Annee <> C2.Annee); -- Calcul relationnel SELECT DISTINCT Etudiant FROM Cours AS C1 WHERE NOT (Annee = ALL (SELECT Annee FROM Cours AS C2 WHERE C1.Etudiant = C2.Etudiant AND C1.Matiere = C2.Matiere)); -- Utilisation des agregas SELECT DISTINCT Etudiant, COUNT(Annee) FROM (SELECT DISTINCT Etudiant, Matiere, Annee FROM Cours) AS R GROUP BY Etudiant, Matiere HAVING COUNT(Annee) > 1;
Question 1.4 (1 point)
dirents.
Rponse :

crire une requte SQL qui caractrise les

Groupe

ayant eu moins de 5

Professeur

-- Utilisation des agregas SELECT DISTINCT Groupe, COUNT(Professeur) FROM (SELECT DISTINCT Groupe, Professeur FROM Cours) AS R GROUP BY Groupe HAVING COUNT(Professeur) < 5;
2/ 6

INF 159 : Bases de donnes

Session 1, Anne 2009/2010

Question 1.5 (2 points)


qui a eu moins de 2 dirents.
Rponse :

crire une requte SQL qui caractrise les Etudiant ayant appartenu un Groupe Professeur dirents, et n'ayant pas appartenu un Groupe qui a eu plus de 9 Professeur

-- Utilisation des agregas SELECT DISTINCT Etudiant FROM Cours AS C, (SELECT DISTINCT Groupe, COUNT(Professeur) FROM (SELECT DISTINCT Groupe, Professeur FROM Cours) AS R GROUP BY Groupe HAVING COUNT(Professeur) < 2) AS Rabachage; WHERE C.Groupe = Rabachage.Groupe EXCEPT SELECT DISTINCT Etudiant FROM Cours AS C, (SELECT DISTINCT Groupe, COUNT(Professeur) FROM (SELECT DISTINCT Groupe, Professeur FROM Cours) AS R GROUP BY Groupe HAVING COUNT(Professeur) > 9) AS Decouverte; WHERE C.Groupe = Decouverte.Groupe
Question 1.6 (2 points)
Traduisez l'expression algbrique suivante :

[Annee,Groupe,Matiere](Cours) [C1.Annee,C1.Groupe,C1.Matiere]( [ C1.Annee = C2.Annee C1.Groupe = C2.Groupe C1.Matiere = C2.Matiere

]([Cours :C1] [Cours :C2]))

en une requte SQL, puis expliquez ce qu'elle calcule.


Rponse :

-- Algebre relationnelle SELECT DISTINCT Annee, Groupe, Matiere FROM Cours EXCEPT SELECT C1.Annee, C1.Groupe, C1.Matiere FROM Cours AS C1, Cours AS C2 WHERE C1.Annee <> C2.Annee AND C1.Groupe = C2.Groupe AND C1.Matiere = C2.Matiere; -- Calcul relationnel SELECT DISTINCT Annee, Groupe, Matiere FROM Cours AS C1 WHERE NOT EXISTS (SELECT * FROM Cours AS C2 WHERE C1.Annee <> C2.Annee AND C1.Groupe = C2.Groupe AND C1.Matiere = C2.Matiere);
La requte SQL caractrise les couples

(Groupe,Matiere)

spciques une

Annee.

Question 1.7 (2 points)


Rponse :

crire une requte SQL qui caractrise les

Etudiant ayant eu tous les Professeur.

-- Algebre relationnelle SELECT DISTINCT Etudiant FROM Cours EXCEPT SELECT Etudiant
3/ 6

INF 159 : Bases de donnes

Session 1, Anne 2009/2010

FROM ( SELECT * FROM (SELECT DISTINCT Etudiant FROM Cours) AS PiR1, (SELECT DISTINCT Professeur FROM Cours) AS R2 EXCEPT SELECT Etudiant, Professeur FROM Cours ) AS NonEntierR1; -- Calcul relationnel SELECT DISTINCT Etudiant FROM Cours AS P1 WHERE NOT EXISTS (SELECT DISTINCT Professeur FROM Cours AS P2 WHERE NOT EXISTS (SELECT DISTINCT Professeur FROM Cours AS P11 WHERE P11.Etudiant = P1.Etudiant AND P11.Professeur = P2.Professeur));
Les questions suivantes portent sur la normalisation de la relation

Cours. Cours.

Question 1.8 (1 point)


Rponse :

Donnez toutes les clefs candidates de la relation

 Les dpendances fonctionnelles donnent :

C1 = {Etudiant, Annee, Professeur} et C2 = {Etudiant, Annee, Matiere}

Question 1.9 (1 point)


relation

Cours

Mme si l'on suppose qu'il n'y a aucun doublon dans

Cours,

justiez pourquoi la

n'est pas en troisime forme normale.

Rponse : Une seule des explications suivantes est susante (liste non exhaustive). Non 2NF : La clef Non 2NF : La clef

{Etudiant, Annee, Professeur} {Etudiant, Annee, Professeur}

contient contient

{Professeur}

qui dtermine

{Matiere}. {Groupe}.
en un

{Etudiant, Annee}

qui dtermine

Question 1.10 (2 points)

Appliquez un algorithme (ou une technique) de normalisation pour obtenir une

dcomposition, sans perte d'information et sans perte de dpendance fonctionnelle, de la relation dpendances fonctionnelles qui sont la base des projections eectues.
Rponse : Dcomposition en 3NF :

Cours

ensemble de relations en troisime forme normale. Vous n'crirez sur la copie que les nouvelles relations et les

1. 2.

{Etudiant, Annee} {Groupe}


non BCNF.

Inscrits (Etudiant, Annee, Groupe) 3NF et BCNF. {Groupe, Matiere} {Professeur} donne Repartition (Groupe, Matiere, Professeur) 3NF
donne

et

Question 1.11 (2 points)

Aprs avoir prcis si votre dcomposition est en BCNF ou bien seulement en

3NF, rpondez la question qui vous concerne.


Votre dcomposition est en BCNF

 Indiquez la dpendance fonctionnelle que vous avez perdue.


Votre dcomposition est seulement en 3NF

 Indiquez le problme de redondance qui subsiste.


Rponse : Dcomposition en BCNF

1.

{Groupe, Matiere} {Professeur} qui indique qu'un seul professeur est aect un groupe pour
une matire donne. : est duplique.

Votre dcomposition est seulement en 3NF

1. L'information

(Professeur, Matiere)

4/ 6

INF 159 : Bases de donnes

Session 1, Anne 2009/2010

Exercice 2 (vitement de l'interblocage (4 points))

La srialisation des transactions est souvent obtenue l'aide de verrous. Un verrou est un triplet (tat du verrou (L,S ou X), liste des dtenteurs du verrou, liste des demandes). Un exemple classique d'interblocage lors d'un verrouillage strict avec deux types de verrous est : Transaction A dem(select(tuple)) temps t0 t1.1 t1.2 t2.1 t2.2 dem(update(tuple)) . . . t3.1 t4.1 . . . dem(update(tuple)) . . . dem(select(tuple)) Transaction B Verrou(tuple)

select(tuple)

select(tuple)

(L, , ) (L, , {lecture(A)}) (S, {A}, ) (S, {A}, {lecture(B )}) (S, {A, B }, ) (S, {A, B }, {ecriture(A)}) (S, {A, B }, {ecriture(A), ecriture(B )})
. . .

L'vitement consiste adapter le protocole deux phases en mmorisant pour chaque transaction une estampille qui est sa date de cration. Cette estampille sert pour soit tuer une transaction, soit s'auto-dtruire. Deux versions lorsque
Wait-Die : si

(Ti , ei )

demande un verrou sur attend, sinon blesse

tuplej Ti

dtenu par

(Tk , ek ).

ei < ek , Ti

Ti

meurt. attend.

Wound-Wait : si

ei < ek , Ti

Tk ,

sinon

Dans les deux cas, la transaction tue redmarre plus tard en gardant son estampille d'origine.

Question 2.1 (4 points)

Complter le tableau suivant en utilisant la version

transactions doivent se terminer par un

COMMIT

Wound-Wait

de l'vitement. Les

aprs leur

update

russi.

5/ 6

INF 159 : Bases de donnes

Session 1, Anne 2009/2010

Rponse :

Transaction A dem(select(tuple))

temps t0 t1.1 t1.2 t2.1 t2.2

Transaction B

Verrou(tuple)

select(tuple)

dem(select(tuple))

select(tuple)
dem(rollback )

dem(update(tuple))

t3.1 t4.1 t4.2

rollback

update(tuple) dem(commit) commit

t3.2 t5.1 t5.2 t6.1 t6.2 t7.1 t7.2 t8.1 t8.2 t9 dem(select(tuple))

select(tuple)
dem(update(tuple))

(update(tuple)) dem(commit) (commit)

(L, , ) (L, , {lecture(A, t1)}) (S, {(A, t1)}, ) (S, {(A, t1)}, {lecture(B, t2)}) (S, {(A, t1), (B, t2)}, ) (S, {(A, t1), (B, t2)}, {ecriture(A, t1)}) (S, {(A, t1), (B, t2)}, {ecriture(A, t1), rollback (B, t2)}) (S, {(A, t1)}, {ecriture(A, t1)}) (X, {(A, t1)}, ) (X, {(A, t1)}, {commit(A, t1)}) (L, , ) (L, , {lecture(B, t2)}) (S, {(B, t2)}, ) (S, {(B, t2)}, {ecriture(B, t2)}) (X, {(B, t2)}, ) (X, {(B, t2)}, {commit(B, t2)}) (L, , ) (L, , )

Exercice 3 (Optimisation des requtes (3 points))

Question 3.1 (1 point)


les SGBD.
Rponse :

Donner les objectifs principaux des modules d'optimisation des requtes prsents dans

1. Diminuer le temps de calcul des requtes. 2. Laisser le choix aux dveloppeurs d'applications pour l'criture des requtes. 3. Ne pas avoir informer les dveloppeurs d'applications des choix de structures de donnes retenus.

Question 3.2 (2 points)

Donner les techniques de bases de l'optimisation des requtes et en quelques mots

leurs avantages et inconvnients.


Rponse :

1. Rcriture de requtes. 2. Compression des donnes. 3. Indexation, hachage. 4. Statistiques sur les tailles des relations. 5. Utilisation des dpendances fonctionnelles.

6/ 6