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 :

DISVE
Licence

Dure :

1 heure 30

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.

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

Soit la relation



matire donne.


{Professeur} {Matiere}

Question 1.1 (1 point)


les

Professeur

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

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

ayant travaill en 2007-2008 pour le groupe CSB6A12.

Rponse :

-- les
SELECT
FROM
WHERE
AND

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

Professeur ayant travaill en '2007-2008' pour le groupe 'CSB6A12'.


Professeur
Cours
Annee = '2007-2008'
Groupe = 'CSB6A12';

Question 1.2 (1 point)


les

Professeur

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

ayant enseign dans au moins deux

Groupe

dirents pour un mme

Etudiant.

Rponse :

[C1.Professeur]([ C1.Professeur = C2.Professeur


C1.Etudiant = C2.Etudiant
C1.Groupe 6= 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

Annee

crire une requte SQL qui caractrise les

Etudiant ayant travaill la mme Matiere

direntes.

Rponse :

-- 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)

crire une requte SQL qui caractrise les

dirents.
Rponse :

-- 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

Groupe

ayant eu moins de 5

Professeur

INF 159 : Bases de donnes

Session 1, Anne 2009/2010

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

Question 1.5 (2 points)


qui a eu moins de 2
dirents.
Rponse :

-- 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 6= 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

Question 1.7 (2 points)

(Groupe,Matiere)

spciques une

crire une requte SQL qui caractrise les

Rponse :

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

Annee.

Etudiant ayant eu tous les Professeur.

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

Question 1.8 (1 point)

Donnez toutes les clefs candidates de la relation

Rponse :

 Les dpendances fonctionnelles donnent :

Question 1.9 (1 point)


relation

Cours

Cours.
Cours.

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

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

{Etudiant, Annee, Professeur}

contient

{Professeur}

Non 2NF : La clef

{Etudiant, Annee, Professeur}

contient

{Etudiant, Annee}

Question 1.10 (2 points)

qui dtermine

{Matiere}.

qui dtermine

{Groupe}.

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

Cours

en un

ensemble de relations en troisime forme normale. Vous n'crirez sur la copie que les nouvelles relations et les
dpendances fonctionnelles qui sont la base des projections eectues.
Rponse : Dcomposition en 3NF :

1.
2.

{Etudiant, Annee} {Groupe}

Inscrits (Etudiant, Annee, Groupe) 3NF et BCNF.


{Groupe, Matiere} {Professeur} donne Repartition (Groupe, Matiere, Professeur) 3NF
donne

et

non BCNF.

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.

Votre dcomposition est seulement en 3NF

1. L'information

(Professeur, Matiere)

:
est duplique.

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

temps

dem(select(tuple))

t1.1

select(tuple)

t1.2

Verrou(tuple)

Transaction B

(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)})

t0

t2.1

dem(select(tuple))

t2.2

select(tuple)

dem(update(tuple))

t3.1

.
.
.

t4.1
.
.
.

dem(update(tuple))
.
.
.

.
.
.

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

ei < ek , Ti

Wound-Wait : si

Ti

attend, sinon

ei < ek , Ti

blesse

Tk ,

tuplej

dtenu par

(Tk , ek ).

meurt.

sinon

Ti

attend.

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

aprs leur

5/ 6

update

russi.

Wound-Wait

de l'vitement. Les

INF 159 : Bases de donnes

Session 1, Anne 2009/2010

Rponse :

Transaction A

temps

dem(select(tuple))

t1.1

select(tuple)

t1.2

Transaction B

t0

dem(update(tuple))

update(tuple)
dem(commit)
commit

t2.1

dem(select(tuple))

t2.2

select(tuple)

t3.1
t4.1

dem(rollback)

t4.2

rollback

t3.2
t5.1
t5.2
t6.1

dem(select(tuple))

t6.2

select(tuple)

t7.1

dem(update(tuple))

t7.2

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

t8.1
t8.2
t9

Verrou(tuple)

(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)

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

les SGBD.
Rponse :

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

Vous aimerez peut-être aussi