Vous êtes sur la page 1sur 11

Université Ibn Zohr Janvier 2013

Faculté des Sciences Agadir Session normale


Département Informatique SMI5
Examen
Module : Bases de Données et SI
Cours de Mer M. Machkour
Partie 1 7pts
Exercice 1 1pt
Soit la relation R(A, B, C) dont le contenu est donné ci-après :
R
A B C
a1 b1 c1
a2 b1 c2
a3 b2 c1
Nous supposons la décomposition de R en R1(A,B) et R2(B,C) données dans les tableaux suivants:
R1 R2
A B B C
a1 b1 b1 c1
a2 b1 b1 c2
a3 b2 b2 c1

Vérifier si cette décomposition se fait sans perte d'information. Justifier la réponse.

Réponse
Cette décomposition se fait avec perte d'informations. En effet,
On calcule R1*R2 (jointure naturelle) et on la compare avec R

R1* R2
A B C
a1 b1 c1
a1 b1 c2
a2 b1 c1
a2 b1 c2
a3 b2 c1

OU bien
On calcule R1 ∩ R2=B et qui n'est pas clé ni de R1 ni de R2.

Exercice 2 1,5pt
Nous donnons la relation R=<R,Ψ>, avec
R(A, B, C, D, E, F) et Ψ ={A CD; D BF; F E}.
Les décompositions suivantes de R se font-elles sans perte d'information? Chaque réponse doit être justifiée.
[Q1] R1(A, B, C, D, F) et R2(D, E);
[Q2] R1(A, B, C, D) et R2(A, B, E);
[Q3] R1(A, B, C, D) et R2(B, E, F).

Réponse
[Q1] R1(A, B, C, D, F) et R2(D, E);
On calcule D+={D,,B,F,E…} donc D est clé de R2. Cette décomposition se fait sans perte d'informations.

[Q2] R1(A, B, C, D) et R2(A, B, E);


On calcule AB+={A, B, ,C, D, F, E}. donc AB est clé soit de R1 soit de R2. Cette décomposition se fait sans
perte d'informations.

[Q3] R1(A, B, C, D) et R2(B, E, F).


On calcule B+={B} donc B n'est pas clé de R1 ni de R2. Cette décomposition se fait avec perte d'informations.

Page 1 sur 11
Exercice 3 4,5pts
Nous considérons la relation R(A, B, C, D, E, F) avec les dépendances fonctionnelles suivantes:
Ψ ={AB CD; CE AD; CF EB; E F; CE E}.
[Q1] Donner la couverture minimale de Ψ. 2pts
[Q2] Normaliser R en 3FN. 1pt
[Q3] Normaliser R en FNBC. 1,5pt
Réponse
[Q1] Donner la couverture minimale de Ψ. 2pts
Etape 1
Ψ ={AB C; AB D; CE A; CE D; CF E; CF B; E F; CE E}
Etape 2 recherche des attributs redondants :
Dans la DF AB C, on calcule A+={A}. Donc B n'est pas redondant.
On fait de même pour A en calculant B+.

Dans la DF CE A, on calcule E+={E, F}. Donc il n'y a pas de redondance.


Dans la DF CE A, on calcule C+={C}. Donc il n'y a pas de redondance.

Dans la DF CE E, il y a une redondance de E.


Donc, on obtient l'ensemble de DFs suivant:
Ψ ={AB C; AB D; CE A; CE D; CF E; CF B; E F; CE E}
Etape 3 recherche des DFs redondantes:

AB C n'est pas redondante car il n'y a pas de DF qui se termine par C.


Pour AB D, on calcule AB+={A,B, C}. Donc, elle n'est pas redondante.
Pour CE D, on calcule CE+={C,E,F,B,A,D}. donc CE D est redondante.
Pour CF E, on calcule CF+={C,F,B}. Donc pas de redondance
On fait de même pour les autres.
Pour CE E elles est évidemment redondante.
Donc, on obtient la couverture minimale suivante:
Ψ ={AB C; AB D; CE A; CF E; CF B; E F}

[Q2] Normaliser R en 3FN. 1pt


On obtient les relations suivantes:
R1(A,B,C,D)
R2(C,E,A)
R3(C,F,E*,B)
R4(E,F)

Il faut montrer que CE+=R.


[Q3] Normaliser R en FNBC. 1,5pt
Ψ ={AB CD; CE AD; CF EB; E F; CE E}.

Dans AB CD, on calcule AB+= {A,B, C,D}<> R. Donc cette DF viole FNBC.
On fait une décomposition
R1(A,B,C,D)
R2=R/(CD/AB)=R2(A,B,E,F) avec les DFs={E F}
On décompose maintenant R2
On calcule E+={E,F}. elle viole FNBC. On fait alors la décomposition suivante:
R21(E,F)
R22=R2\(F\E)=R22(A,B,E) et ses DFs={}.

Partie 2 3pts
Une société de prêt de films sur support optique(cd, dvd) compte plusieurs agences réparties sur plusieurs
villes(décrite par un code et un nom). Chaque agence possède un nom, une adresse composée de nom de la rue,
d’un numéro et de nom du quartier. Elle a en plus un code unique dans l’ensemble de la société.
Chaque agence fonctionne avec un personnel dont un est chef. Un employé d’une agence est décrit par un nom,
prénom, fonction, salaire, adresse, téléphone et la date d’embauche. En plus, il possède un numéro relatif à
l'agence où il travaille. Pour un film, on détient le titre, le metteur en scène, les acteurs principaux (nom et

Page 2 sur 11
nationalité), la date de sortie, les prix obtenus (relatifs aux festivals) ainsi que le code et la catégorie du film. Le
prêt d'un film est autorisé uniquement aux membres. Pour chaque membre, on conserve les informations
représentées à la figure ci-dessous. A chaque prêt, l'agence enregistre la date de prêt, la date de retour ainsi que
l'employé ayant effectué cette opération de prêt. A chaque prêt est octroyé un numéro unique pour l’ensemble de
la société.
Un membre peut emprunter simultanément plusieurs films.
L’approvisionnement de l’agence en films se fait par des fournisseurs avec chacun un code, une adresse
composée d'un numéro, d'un nom de quartier et d'un nom de ville.

Numéro : 11
Nom : ali Genre M
prénom Med Date_naissance 12/12/1988
Adresse : 100, rue des iris ville Casa
Code postal : 80000
Quartier Cité dakhla

Date d’inscription : 12/01/2000


Date dernière location :

[Q1] Construire le diagramme E-R qui modélise la situation décrite ci-dessus. 2pts
[Q2] Après avoir converti, dans le schéma conceptuel trouvé à la question 1, des relations en entités
associatives, donner le schéma relationnel du modèle trouvé. 1pt
Réponse
[Q1] Construire le diagramme E-R qui modélise la situation décrite ci-dessus. 2pts

Page 3 sur 11
Fournisseur
approvisionne code_fournisseur <pi>
1,n nom_fournisseur
numero
quartier
ville
Identifiant_1 <pi>
Agence ... prix
1,n
code_agence <pi> Entier Ville code_prix <pi> Entier
nom_membre Caractère (15) nom_prix Caractère (15)
se_trouve code_ville <pi> Entier
numero Entier 1,1 festival Caractère (15)
nom_rue Caractère (15) 0,n nom_ville Caractère (15)
...
Identifiant_1 <pi>
nom_quartier 1,1
Caractère (15) Identifiant_1 <pi>
... 1,n
Identifiant_1 <pi>
... Prêt 0,n
concerne obtient
1,n num_prêt <pi>
est_chef 1,1
date_prêt Film
a date_retour code_film <pi>
Identifiant_1 <pi> 0,n metteur_en_scene
... 1,1 titre
1,n est_disponible
1,1 date_sortie
1,1 0,1
effectue catégorie
enregistre
employe 0,n
1,n
code_emp <pi> 1,n 1,n
nom_membre joue Support
prenom_membre code_support <pi>
fonction Membre
nom_support
salaire code_membre <pi> Entier
1,n Identifiant_1 <pi>
adresse nom_membre Caractère (15) ...
date_embauche prenom_membre Caractère (15)
... date_naissance <Indéfini> Acteur_principal
genre <Indéfini> code_acteur <pi> Entier
adresse Caractère (15) nom_membre Caractère (15)
quartier <Indéfini> nationalite Caractère (15)

[Q2] Après avoir converti, dans le schéma conceptuel trouvé à la question 1, des relations en entités
associatives, donner le schéma relationnel du modèle trouvé. 1pt

Page 4 sur 11
Fournisseur
approvisionne code_fournisseur INTEGER <pk>
FK_APPROVIS_APPROVISI_FOURNISS
code_fournisseur INTEGER <pk,fk1> nom_fournisseur CHAR(15)
code_agence INTEGER <pk,fk2> numero INTEGER
quartier <Non défini>
FK_APPROVIS_APPROVISI_AGENCE ville <Non défini>
...
Agence
prix
code_agence INTEGER <pk>
code_prix INTEGER <pk>
code_emp INTEGER <fk2> Ville
FK_AGENCE_SE_TROUVE_VILLE nom_prix CHAR(15)
code_ville INTEGER <fk1>
code_ville INTEGER <pk> festival CHAR(15)
nom_membre CHAR(15)
nom_ville CHAR(15) ...
numero INTEGER
FK_OBTIENT_OBTIENT2_PRIX
nom_rue CHAR(15)
nom_quartier CHAR(15) Prêt
obtient
... num_prêt <Non défini> <pk>
code_film INTEGER <fk2> code_film INTEGER <pk,fk1>
code_membre INTEGER <fk1> Film code_prix INTEGER <pk,fk2>
FK_OBTIENT_OBTIENT_FILM
FK_PRET_CONCERNE_FILM
code_emp INTEGER <fk3> code_film INTEGER <pk>
FK_EMPLOYE_A_AGENCE
FK_EMPLOYE_EST_CHEF_AGENCE
FK_AGENCE_EST_CHEF2_EMPLOYE
date_prêt <Non défini> metteur_en_scene CHAR(15)
date_retour <Non défini> titre CHAR(25) est_disponible
FK_EST_DISP_EST_DISPO_FILM
... date_sortie DATE code_support INTEGER <pk,fk1>
catégorie CHAR(15) code_film INTEGER <pk,fk2>
employe ...
FK_PRET_EFFECTUE_MEMBRE
code_emp INTEGER <pk> FK_JOUE_JOUE2_FILM FK_EST_DISP_EST_DISPO_SUPPORT
code_agence INTEGER <fk1>
joue
Age_code_agence INTEGER <fk2> Support
nom_membre CHAR(15) code_acteur INTEGER <pk,fk1>
FK_PRET_ENREGISTR_EMPLOYE
Membre code_film INTEGER <pk,fk2> code_support INTEGER <pk>
prenom_membre CHAR(15)
nom_support CHAR(5)
fonction CHAR(15) code_membre INTEGER <pk>
salaire FLOAT(15) nom_membre CHAR(15) FK_JOUE_JOUE_ACTEUR_P
adresse CHAR(15) prenom_membre CHAR(15)
date_embauche DATE date_naissance <Non défini> Acteur_principal
... genre <Non défini> code_acteur INTEGER <pk>
adresse CHAR(15) nom_membre CHAR(15)
quartier <Non défini> nationalite CHAR(15)
... ...
Partie 3
On considère le schéma de base de données suivant:
emp(code_emp, nom, prénom, salaire, adresse)
service(code, libellé, chef*).
A/ 1,5pt
[Q1] Donner la commande de création de la table emp sans contrainte.
[Q2] Ajouter à la table emp la contrainte de clé primaire.
[Q3] Ajouter à la table emp l’attribut code_serv qui fait référence à la clé de la table service avec une action
référentielle assurant une mise à jour en cascade.
B/ 0,75pt pour chaque question
Répondre en algèbre relationnelle puis en SQL aux questions suivantes :
[Q1] Lister le nom et le prénom des employés du service de libellé ‘Achat’.
[Q2] Lister pour chaque employé, le nom, le prénom et le numéro de son chef.
[Q3] Lister pour chaque employé, le nom, le prénom et le nom de son chef.
[Q4] Chercher les employés ayant même salaire que leur chef de service.
[Q5] Chercher pour chaque service le libellé et le nombre d’employés.
[Q6] Chercher le libellé de service de l’employé qui a le salaire maximal.
[Q7] Chercher les employés qui possèdent le salaire maximal dans leur service (afficher le code de l’employé
et le libellé de son service).
[Q8] Trouver le service qui possède le maximum d’employés.
[Q9] Chercher les employés appartenant aux services ayant le maximum d’employés.

Page 5 sur 11
[Q10] Chercher les couples de services ayant la même somme de salaires de leurs employés (éviter les couples
de la forme (x,x) ou (x,y) et(y,x)).
C/ 1pt
Donner l’arbre algébrique de la requête suivante :
Le code, le nom et le libellé de service des employés ayant un salaire supérieur à la moyenne des salaires de leur
service.

Note. Chaque partie doit être rédigée dans une feuille séparée.

Réponse
A/
[Q1] Donner la commande de création de la table emp sans contrainte.

Create table emp (


code_emp number,
nom varchar(10),
prénom varchar(10),
salaire number,
adresse varchar(30)
);

[Q2] Ajouter à la table emp la contrainte de clé primaire.

Alter table emp


Add [constraint clé] primary key(code_emp)

[Q3] Ajouter à la table emp l’attribut code_serv qui fait référence à la clé de la table service avec une action
référentielle assurant une mise à jour en cascade.

Alter table emp


Add foreign key(code_serv) references service(code) on update cascade;

B/
Répondre en algèbre relationnelle puis en SQL aux questions suivantes :
[Q1] Lister le nom et le prénom des employés du service de libellé ‘Achat’.

Avec C=(emp.code_service=service.code) Et s=(libellé ='achat').


SQL :
Select nom, prénom
from emp join service on emp.code_serv=service.code
where libellé ='achat';

[Q2] Lister pour chaque employé, le nom, le prénom et le numéro de son chef.

Avec C=(emp.code_service=service.code)

SQL:
Select nom, prénom , chef

Page 6 sur 11
from emp join service on emp.code_serv=service.code

[Q3] Lister pour chaque employé, le nom, le prénom et le nom de son chef.

Chercher le nom de chef et le code de son service

Avec C=(emp.code_emp=service.chef)

Avec C1=(emp.code_serv=service.code_serv)

SQL:
Select a.nom, a.prenom , b.nom
from (select nom , prenom,code from emp join service on emp.code_serv=service.code) a
join
(select nom,code from emp join service on emp.code_emp=service.chef) b on
a.code=b.code
/

[Q4] Chercher les employés ayant même salaire que leur chef de service.

On cherche pour chaque chef le salaire et le code de service

Avec C=(emp.code_emp=service.chef)

SQL:
Select a.nom, a.prenom
from (select nom , prenom,salaire, code from emp join service on
emp.code_serv=service.code) a
join
(select salaire ,code from emp join service on
emp.code_emp=service.chef) b
on a.code=b.code and a.salaire=b.salaire
/

Page 7 sur 11
[Q5] Chercher pour chaque service le libellé et le nombre d’employés.

Avec C=(emp.code_service=service.code)
Donc
R=count(R1; libellé ; code_emp)

SQL
Select lib, count(code_emp)
from
emp join service on emp.code_serv=service.code
group by code,lib
/

[Q6] Chercher le libellé de service de l’employé qui a le salaire maximal.

On calcule d'abord le salaire maximal :

R1=max (emp ; ; salaire)


On cherche l'employé ou le service qui a ce salaire:

Avec C=(salaire=max-salaire)
On cherche ensuite le libellé

Avec C=(code=code_serv)
SQL:
Select libellé
from emp join service on emp.code_serv=service.code
where salaire=(select max(salaire) from emp)
/
[Q7] Chercher les employés qui possèdent le salaire maximal dans leur service (afficher le code de l’employé
et le libellé de son service).

R1=max (emp ; code_serv ; salaire)

Page 8 sur 11
Avec C=(code=code_serv)

Avec s=(salaire=max-salaire)
SQL:
select code_emp, lib
from emp e1 join service on (code=code_serv)
where salaire >= all (select salaire from emp e2 where
e1.code_serv=e2.code_serv)
/
[Q8] Trouver le service qui possède le maximum d’employés.

R1=count(emp ; code_serv ; code_emp)

R2=max(R1 ; ; count-code_emp)

Avec C= (count-code_emp=max-count-code_emp).
SQL:
select code_serv
from emp
group by code_serv
having count(code_emp)>=all(select count(code_emp) from emp group by
code_serv)
/
[Q9] Chercher les employés appartenant aux services ayant le maximum d’employés.

Soit R8 la relation obtenue en Q8.

Page 9 sur 11
SQL:
select * from emp where code_serv in
(select code_serv
from emp
group by code_serv
having count(code_emp)>=all(select count(code_emp) from emp
group by code_serv))
/
[Q10] Chercher les couples de services ayant la même somme de salaires de leurs employés (éviter les couples
de la forme (x,x) ou (x,y) et(y,x)).

R1=sum(emp ; code_serv ; salaire)

Avec s=(s1<s2).
SQL :
select s1.code_serv,s2.code_serv
from (select sum (salaire) as som, code_serv from emp group by code_serv)
s1 join
(select sum (salaire) as som, code_serv from emp group by code_serv) s2
on s1.som=s2.som and s1.code_serv<s2.code_serv
/

C/
Donner l’arbre algébrique de la requête suivante :
Le code, le nom et le libellé de service des employés ayant un salaire supérieur à la moyenne des salaires de leur
service.

Page 10 sur 11
R

emp
Avg(code_serv;salaire)

emp

Avec C=(Avg-salaire<salaire)

Page 11 sur 11

Vous aimerez peut-être aussi