Corrigé Examen Final Bases de Données (2010/2011)

publicité
Ecole Supérieure de la Statistique et de l’Analyse de l’Information
‫اﻟﻣدرﺳﺔ اﻟﻌﻠﯾﺎ ﻟﻺﺣﺻﺎء وﺗﺣﻠﯾل اﻟﻣﻌﻠوﻣﺎت ﺑﺗوﻧس‬
Corrigé Examen Final
Bases de Données (2010/2011)
Questions de cours :
Répondre, brièvement mais précisément, aux questions suivantes :
Q1) A travers un exemple, décrire quels sont les inconvénients de schémas de BD non normalisés ?
redondances => anomalies lors des mises à jour
Exemple : Fournisseur (NF, NomF, TelF, Nprod,libellé)
Q2) Quels sont les différents types et utilités des Contraintes d’Intégrité que l’on peut ajouter à un
schéma SQL de définition de données ?
Contraintes de domaine, d'unicité, de clé primaire, de clé étrangère, etc..
Q3) Parmi les propositions suivantes, déterminer celles qui sont incorrectes (justifiez votre réponse)
:
a)- DECLARE
V_id CHAR(20) ;
correct
b)- DECLARE
v1, v2, v3
INTEGER ;
incorrect : une seule variable par ligne
Corrigé Examen Bases de Données (2011/2012)- F. CHAKER
Page 1
c)- DECLARE
date_naissance
DATE NOT NULL ;
incorrect : une valeur NOT NULL doit être initialisée
d)- DECLARE
stock
BOOLEAN :=1 ;
incorrect : 1 n’est pas une valeur booléenne
e)- Dans un bloc PL/SQL, il est possible d’exécuter des instructions du SQL DDL (Data
Definition Language), soit les instructions ALTER, CREATE et DROP.
incorrect : Dans un bloc PL/SQL, il n’est pas possible d’exécuter 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 schéma en 3ème forme normale en justifiant les
décompositions proposées :
Présentation (N°Conférencier, Nom_Conférence, Date_Conférence ,
Laboratoire_affiliation, Lieu_Conférence, Sujet_Présenté)
NomConférencier,
Sachant que :
 Une conférence est identifiée par son nom et la date à laquelle elle aura lieu
 Un conférencier ne présente qu’un seul sujet par conférence
 Un conférencier est affilié à un seul laboratoire de recherche
La clé candidate est composée de (N°Conférencier, Nom_Conférence, Date_Conférence)
N°Conférencier, Nom_Conférence, Date_Conférence  NomConférencier
N°Conférencier, Nom_Conférence, Date_Conférence  Laboratoire_affiliation
N°Conférencier, Nom_Conférence, Date_Conférence  Lieu_Conférence
N°Conférencier, Nom_Conférence, Date_Conférence  Sujet_Présenté
Présentation est en 1FN
Or on peut déduire :
N°Conférencier  NomConférencier
N°Conférencier  Laboratoire_affiliation
Nom_Conférence, Date_Conférence  Lieu_Conférence
Corrigé Examen Bases de Données (2011/2012)- F. CHAKER
Page 2
+   est une DFE
+  est une DFE
+  est une DFE
D’où Présentation n’est pas en 2FN
 Conférencier (N°Conférencier ,NomConférencier, Laboratoire_affiliation)
Conférence (Nom_Conférence, Date_Conférence,Lieu_Conférence)
Présentation (N°Conférencier, Nom_Conférence, Date_Conférence, Sujet_Présenté)
Ces 3 relations sont en 3FN
Exercice 2 :
Soit le schéma relationnel suivant :
Salle (NomS, Horaire, capacité, Titre*)
Film (Titre, réalisateur, durée, acteur)
Producteur (Producteur, Titre*)
Vu (Spectateur, Titre*)
Aime (Amateur, Titre*)
Sachant que :

Un film peut être produit par plusieurs producteurs

La relation Vu décrit les titres des films vus par les spectateurs. Evidemment un
spectateur peut voir plusieurs films

La relation Aime décrit les films appréciés par les spectateurs (amateurs). Evidemment,
un spectateur peut aimer plusieurs films.
1- Exprimez en Algèbre relationnelle ET en SQL les requêtes 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 Données (2011/2012)- F. CHAKER
Page 3
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 qu’ils 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 Données (2011/2012)- F. CHAKER
Page 4
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 d’afficher le nombre de films réalisés par chaque réalisateur
sous la forme (Le réalisateur : Foulen à réalisé 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 réalisateur, COUNT(Titre) AS NB FROM Film GROUP
BY réalisateur;
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 réalisateur’|| Un_enreg.réalisateur||’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 ;
Corrigé Examen Bases de Données (2011/2012)- F. CHAKER
Page 5
Téléchargement