Vous êtes sur la page 1sur 5

Corrig Examen Bases de Donnes (2011/ 2012)- F.

CHAKER Page 1



Ecole Suprieure de la Statistique et de lAnalyse de lInformation

Corrig Examen Final
Bases de Donnes (2010/ 2011)

Questions de cours :
Rpondre, brivement mais prcisment, aux questions suivantes :
Q1) A travers un exemple, dcrire quels sont les inconvnients de schmas de BD non normaliss ?
redondances => anomalies lors des mises jour
Exemple : Fournisseur (NF, NomF, TelF, Nprod,libell)

Q2) Quels sont les diffrents types et utilits des Contraintes dIntgrit que lon peut ajouter un
schma SQL de dfinition de donnes ?
Contraintes de domaine, d'unicit, de cl primaire, de cl trangre, etc..
Q3) Parmi les propositions suivantes, dterminer celles qui sont incorrectes (justifiez votre rponse)
:
a)- DECLARE
V_id CHAR(20) ;
correct
b)- DECLARE
v1, v2, v3 INTEGER ;
incorrect : une seule variable par ligne
Corrig Examen Bases de Donnes (2011/ 2012)- F. CHAKER Page 2

c)- DECLARE
date_naissance DATE NOT NULL ;
incorrect : une valeur NOT NULL doit tre initialise
d)- DECLARE
stock BOOLEAN :=1 ;
incorrect : 1 nest pas une valeur boolenne


e)- Dans un bloc PL/ SQL, il est possible dexcuter des instructions du SQL DDL (Data
Definition Language), soit les instructions ALTER, CREATE et DROP.

incorrect : Dans un bloc PL/ SQL, il nest pas possible dexcuter des instructions du SQL
DDL (Data Definition Language), soit les instructions ALTER, CREATE et DROP.

Exercice 1: Normalisation
Etudier la relation suivante et proposer un schma en 3
me
forme normale en justifiant les
dcompositions proposes :

Prsentation (NConfrencier, Nom_Confrence, Date_Confrence , NomConfrencier,
Laboratoire_affiliation, Lieu_Confrence, Sujet_Prsent)

Sachant que :
Une confrence est identifie par son nom et la date laquelle elle aura lieu
Un confrencier ne prsente quun seul sujet par confrence
Un confrencier est affili un seul laboratoire de recherche

La cl candidate est compose de (NConfrencier, Nom_Confrence, Date_Confrence)
NConfrencier, Nom_Confrence, Date_Confrence NomConfrencier
NConfrencier, Nom_Confrence, Date_Confrence Laboratoire_affiliation
NConfrencier, Nom_Confrence, Date_Confrence Lieu_Confrence
NConfrencier, Nom_Confrence, Date_Confrence Sujet_Prsent

Prsentation est en 1FN

Or on peut dduire :
NConfrencier NomConfrencier
NConfrencier Laboratoire_affiliation
Nom_Confrence, Date_Confrence Lieu_Confrence
Corrig Examen Bases de Donnes (2011/ 2012)- F. CHAKER Page 3


+ est une DFE
+ est une DFE
+ est une DFE
Do Prsentation nest pas en 2FN

Confrencier (NConfrencier ,NomConfrencier, Laboratoire_affiliation)
Confrence (Nom_Confrence, Date_Confrence,Lieu_Confrence)
Prsentation (NConfrencier, Nom_Confrence, Date_Confrence, Sujet_Prsent)

Ces 3 relations sont en 3FN

Exercice 2 :
Soit le schma relationnel suivant :
Salle (NomS, Horaire, capacit, Titre*)
Film (Titre, ralisateur, dure, acteur)
Producteur (Producteur, Titre*)
Vu (Spectateur, Titre*)
Aime (Amateur, Titre*)
Sachant que :
Un film peut tre produit par plusieurs producteurs
La relation Vu dcrit les titres des films vus par les spectateurs. Evidemment un
spectateur peut voir plusieurs films
La relation Aime dcrit les films apprcis par les spectateurs (amateurs). Evidemment,
un spectateur peut aimer plusieurs films.
1- Exprimez en Algbre relationnelle ET en SQL les requtes suivantes :
a)- O et quel horaire peut on voir le film Ma belle Tunisie ?
AR :
R1= Selection(Salle, Titre=Ma belle Tunisie
Corrig Examen Bases de Donnes (2011/ 2012)- F. CHAKER Page 4

R2= Projection (R1, Horaire, NomS)
SQL :
SELECT NomS, Horaire
FROM Salle
WHERE Titre=Ma belle Tunisie ;
b)- Quels sont les acteurs qui jouent dans tous les films ?
AR :
R1= Projection(Film, Titre)
R2= Projection(Film, Titre, acteur)
R3= Division(R2,R1)
SQL :
SELECT acteur
FROM Film
GROUP BY acteur
HAVING COUNT(Titre)=(SELECT COUNT(*)
FROM Film);
c)- Quels sont les spectateurs qui aiment tous les films quils voient ?
AR :
R1= Regrouper_et_calculer(Vu, Spectateur, N1=comptage(Titre))
R2= Regrouper_et_calculer(Aime, Amateur, N2=comptage(Titre))
R3= jointure(R1,R2, Spectateur=Amateur)
R4= selection (R3, N1=N2)
R5= projection(R4, Spectateur)
Corrig Examen Bases de Donnes (2011/ 2012)- F. CHAKER Page 5

SQL:
SELECT spectateur
FROM Vu
GROUP BY spectateur
HAVING COUNT(Titre)=(SELECT COUNT(Titre)
FROM Aime
GROUP BY Amateur)
2- Ecrire un bloc PL/ SQL permettant dafficher le nombre de films raliss par chaque ralisateur
sous la forme (Le ralisateur : Foulen ralis XX films) .
Traiter le cas o la table Film est vide comme une Exception. Dans ce cas afficher un message de la
forme Pas de films disponibles !! (4,5 pts)

DECLARE
N integer ;
Film_vide EXCEPTION ;
CURSOR Film_Realisateur IS SELECT ralisateur, COUNT(Titre) AS NB FROM Film GROUP
BY ralisateur;

Un_enreg Film_Realisateur%ROWTYPE;
BEGIN
SELECT COUNT(Titre) INTO N FROM Film ;
If (N=0) THEN RAISE Film_vide;
End if;
Open Film_Realisateur;
FETCH Film_Realisateur INTO Un_enreg
WHILE Film_Realisateur%FOUND
LOOP
DBMS_OUTPUT.PUT_LINE(Le ralisateur| | Un_enreg.ralisateur| | a realize | | Un_enreg.NB
| | films);
FETCH Film_Realisateur INTO Un_enreg
End loop;
Close Film_Realisateur;
EXCEPTION
WHEN Film_vide THEN DBMS_OUTPUT.PUT_LINE(Pas de films disponibles !!) ;
END ;