Vous êtes sur la page 1sur 8

Universit Ibn Zohr Facult des Sciences Agadir Dept.

Informatique Correction dExamen Base de donnes et SI


Cours

SMI5-2011/2012

4 pts 0,5pt

1.

Expliquer lindpendance donnes/programmes assure par les bases de donnes. La modification de la structure de la base de donnes ou son emplacement naffecte pas les programmes utilisant cette base de donnes. Les informations sur les objets de base de donnes ne sont pas stockes dans les programmes, elles sont stockes dans le dictionnaire de la base. Donner la commande qui accorde aux utilisateurs de BD tous les droits sur la table t. Grant all [privileges] on t to public ;

2.

0,5pt

3.

Citer et expliquer les contraintes structurelles du modle relationnel. Il y a trois contraintes : Contrainte de domaine : les valeurs dun attribut doivent appartenir son domaine. Contrainte de relation : chaque table doit avoir une et une seule cl primaire non null. Contrainte de rfrence ou contrainte rfrentielle : les valeurs de la cl trangre existent dans la cl primaire associe ou elles sont null. On considre les axiomes dArmstrong suivants : Si AB alors ACBC. Augmentation Transitivit Union Pseudo-transitivit

1 pts

4. a)

b) Si AB et BC alors AC. c) Si AB et AC alors ABC.

d) Si AB et BCD alors ACD

0,25 0,25 0,25 0,25 0,5pt

i. Donner les noms des axiomes ci-dessus. Voir ci-dessus ii. Montrer que lon peut dduire laxiome (c) partir des axiomes (a) et (b). Supposons que AB et AC et montrons que ABC. AAAB augmentation a) ABBC augmentation a) Donc AABC daprs b). Or AA=A. Do A BC. iii. Montrer que lon peut dduire laxiome (d) partir des axiomes (a) et (b). Supposons que AB et BCD et montrons que ACD. ACBC augmentation a) BCD hypothse Donc ACD daprs b).

0,5pt

Universit Ibn Zohr Facult des Sciences Agadir Dept. Informatique Correction dExamen Base de donnes et SI

SMI5-2011/2012

Exercice 1 On considre une base de donnes nomme publication de schma suivant : Equipe(num_quipe, nom, responsable*, dpartement) dsigne la table des quipes de recherche, Ens(num_ens, nom, prnom, quipe*) dsigne la table des enseignants, Pub(num_pub, intitul, journal) dsigne la table des publications, Participation(num_pub,num_ens). 1. Donner le script complet de cration de la base et de ses tables. (0,25 pour chaque commande) i. Create database publication ; On accepte aussi (Create user Grant all) ii. Create table equipe (num_quipe number primary key,, responsable number,) iii. Create table Ens(num_ens number primary key, quipe *number+ references quipe *(num_quipe)+ *on delete cascade]) iv. Alter table equipe add foreign key(responsable) references ens [(num_ens)] [on delete cascade ou set null] v. Create table publication (num_pub number primary key) vi. Create table participation (num_pub references pub *on delete+, num_ens references ens *on delete +, primary key(num_pub,num_ens)) Donner en algbre relationnelle puis en sql les requtes suivantes : 2. Donner pour chaque enseignant le nom et lintitul des ses publications. A.R.

10,5

1,5pts

1pt

SQL select nom,intitule from ens join participation using (num_ens) join pub using(num_pub) ; 3. Donner le nom et le nombre de publications de chaque enseignant pour le dpartement dinformatique. A.R.

1pt

Avec c= (ens.equipe=e.num_equipe) SQL select nom,count(num_pub) from ens join participation using (num_ens) join pub using(num_pub) join equipe e on ens.equipe=e.num_equipe where departement='inf' group by num_ens,nom ; 4. Donner le(s) quipe(s) ayant le plus grand nombre de publications. A.R.

1pt

Avec C=(R1.count-num_pub=R2.max-count-num_pub) SQL

Universit Ibn Zohr Facult des Sciences Agadir Dept. Informatique Correction dExamen Base de donnes et SI
select count(distinct num_pub),equipe from participation join pub using(num_pub) join ens using (num_ens) group by equipe having count(distinct num_pub)>= all(select count(distinct num_pub) from participation join pub using(num_pub) join ens using(num_ens) group by equipe) 5. Chercher le nom des enseignants sans publications. A.R. SQL select nom from ens where num_ens not in (select num_ens from participation) ; 6.

SMI5-2011/2012

1pt

Trouver le nom des enseignants ayant particip toutes les publications de lquipe TIC . A.R. En utilisant loprateur division R1= R2= Avec c1=(num_equipe=equipe) R3= Avec c2=(num_equipe=equipe) R=R3/ R2 Ou bien R1= R2= Avec c=(num_equipe=equipe) R3=count(R2;num_ens,nom;num_pub) R4=count(R2;;num_pub) R5= R3 ) Avec C=(R3.count-num_pub=R4.count-num_pub)

1pt

//publication de lquipe

SQL select ens.nom , count(distinct num_pub) from participation join ens using(num_ens) where num_pub in (select num_pub from participation join ens using(num_ens) join equipe e on e.num_equipe=equipe where e.nom='TIC' ) group by num_ens,ens.nom having count(distinct num_pub)=( select count(distinct num_pub) from participation join ens using(num_ens) join equipe e on e.num_equipe=equipe where e.nom='TIC') 7. Trouver le nom des enseignants ayant particip toutes les publications de leur quipe.

0,5pt

Universit Ibn Zohr Facult des Sciences Agadir Dept. Informatique Correction dExamen Base de donnes et SI
A.R.

SMI5-2011/2012

R2=count(R1;num_ens,nom, equipe;num_pub) R3=count(R1;equipe;num_pub)

Avec c=(R2.count-num_pub=R3.count-num_pub et R2.equipe=R3.equipe)

SQL select nom from ( select num_ens, equipe ,nom,count(distinct num_pub) as nb_pub from participation natural join ens group by num_ens,nom, equipe) v1 where v1.nb_pub= (select nb_pub from (select equipe ,count(distinct num_pub) as nb_pub from participation natural join ens group by equipe) v2 where v2.equipe=v1.equipe) 8. Trouver les quipes o les enseignants ont tous publi. A.R. R1= R2= R3= R4=R2-R3 R5= R=R1-R5

1pt

R4

SQL select equipe from ens minus select equipe from ens where num_ens not in (select num_ens from participation) ou bien select distinct equipe from ens where equipe not in ( select equipe from ens where num_ens not in (select num_ens from participation)) ou bien encore select equipe from ens minus select equipe from ens natural join ( select num_ens from ens minus select num_ens from participation)

9.

Chercher les enseignants ayant le plus grand nombre de publications. A.R.

1pt

Universit Ibn Zohr Facult des Sciences Agadir Dept. Informatique Correction dExamen Base de donnes et SI
R1=count(participation;num_ens;num_pub) R2=max(R1 ; ;count-num_pub) Avec c=(count-num_pub=max-count-num_pub) SQL select num_ens from participation group by num_ens having count(distinct num_pub) >=all(select count(distinct num_pub) from participation group by num_ens) 10. Chercher les enseignants ayant le plus grand nombre de publications dans leurs quipes.

SMI5-2011/2012

0,5pt

R2=count(R1;num_ens,equipe;num_pub) R3=max(R2; equipe; count-num_pub) Avec c=(count-num_pub=max-count-num_pub et R2.equipe=R3.equipe)

select num_ens from ( select num_ens, equipe ,count(distinct num_pub) as nb_pub from participation natural join ens group by num_ens, equipe) v1 where v1.nb_pub= (select max(nb_pub) from (select num_ens,equipe ,count(distinct num_pub) as nb_pub from participation natural join ens group by num_ens,equipe) v2 where v2.equipe=v1.equipe) ou bien select num_ens from ( select num_ens, equipe ,count(distinct num_pub) as nb_pub from participation natural join ens group by num_ens, equipe) v1 where not exists(select * from (select num_ens,equipe ,count(distinct num_pub) as nb_pub from participation natural join ens group by num_ens,equipe) v2 where v2.nb_pub>v1.nb_pub and v2.equipe=v1.equipe) ou bien encore select num_ens from ( select num_ens, equipe ,count(distinct num_pub) as nb_pub from participation natural join ens group by num_ens,nom, equipe) where (nb_pub,equipe) in (select max(nb_pub),equipe from (select num_ens,equipe ,count(distinct num_pub) as nb_pub from participation natural join ens group by num_ens,equipe) group by equipe)

Universit Ibn Zohr Facult des Sciences Agadir Dept. Informatique Correction dExamen Base de donnes et SI
11. Chercher le nombre de publications par dpartement. A.R. R1= (ens participation R2= (R1 equipe) Avec c=(R1.equipe=equipe.num_equipe) R3=count(R2;departement;num_pub)

SMI5-2011/2012

1pt

SQL select departement,count(distinct num_pub) from ens join participation using(num_ens) join pub using(num_pub)join equipe e on e.num_equipe=equipe group by departement

Exercice 2 On considre la relation R(A,B,C,D,E,F,G,H,I,J,K,L) et l'ensemble de dpendances fonctionnelles dfinies sur les attributs de R. est donn par : ={ A,B->C,D ; H,B->A ; D,B->A ; D->E,F,G ; H->I,J ; A->C,K,L ; A,H->I}. 1. Donner la couverture minimale de .

Etape 1 : Simplification des DFs en format canonique : Pour AB -> CD : AB->C ; AB->D Pour D->EFG: D->E ; D->F ; D->G Pour H->IJ H->I; H->J Pour A->CKL A->C; A->K; A->L devient ={ AB->C; AB->D ; HB->A ; DB->A ; D->E ; D->F; D->G ; H->I; H->J ; A->C; A->K; A->L ; A,H->I}. Etape 2 : Recherche des attributs redondants au niveau des DFs suivantes : AB->C A+={A, C} donc B est redondant AB->C devient A-> C AB->D Pas de redondance HB->A Pas de redondance DB->A Pas de redondance AH->I A est redundant. Donc AH->I deviant H->I.

2 0,5pt

1pt

Universit Ibn Zohr Facult des Sciences Agadir Dept. Informatique Correction dExamen Base de donnes et SI
devient ={ A->C; AB->D ; HB->A ; DB->A ; D->E ; D->F; D->G ; H->I; H->J ; A->K; A->L }.

SMI5-2011/2012

Etape 3:Recherche des DFs redondantes: Les DFs suspectes sont HB->A et DB->A. On montre quelles ne le sont pas en calculant HB+ et DB+. Les tudiants doivent le calculer. Finalement ={ A->C; AB->D ; HB->A ; DB->A ; D->E ; D->F; D->G ; H->I; H->J ; A->K; A->L }.

0,5pt

2. Donner la dcomposition de R en FNBC. On peut utiliser directement lensemble initial de DF ou la couverture minimale. Utilisation de lensemble initiale ={ A,B->C,D ; H,B->A ; D,B->A ; D->E,F,G ; H->I,J ; A->C,K,L ; A,H->I}. Recherche dune DF violant FNBC AB+={A, B, C,D,E,F,G,C,K,L} <> R. car, il manque H, I Donc elle viole FNBC. On fait la dcomposition suivante : R1=(A,B,C,D) et F1={ A,B->C,D} R2=R\(CD\AB)= (A,B,E,F,G,H,I,J,K,L) et F2={ H,B->A ; H->I,J ; A->K,L ; A,H->I}. On procde de la mme manire pour R2. Recherche dune DF violant FNBC Cas de HB-> A HB+={H,B, A, I,J, K, L} <> R2 (manque de E,F,G) Donc elle viole FNBC. On fait la dcomposition suivante : R21(H,B,A) , F21={ H,B->A} R22=R2\(A\HB)= (B,E,F,G,H,I,J,K,L) et F22={ H->I,J }. Cherchant si H-> IJ viole FNBC pour R22. H+={H,I,J}<> R22. Donc elle viole FNBC. On dcompose R22, on obtient ainsi les relations suivantes : R221(H,I,J) et F221={ H->I,J } R222=R22\(IJ\H)= (B,E,F,G,H,K,L) F222={}. Fin de la decomposition.

1,5pts

Les relations obtenues sont :


R1=(A,B,C,D) et F1={ A,B->C,D} R21(H,B,A) , F21={ H,B->A} R221(H,I,J) et F221={ H->I,J } R222=R22\(IJ\H)= (B,E,F,G,H,K,L) F222={}.

3.

Dans cette dcomposition, y a-t-il perte d'information? Les dpendances sont-elles prserves? Non, il n y a pas de perte dinformation. Non, il ny pas prservation de DFs. La DF DB -> A nest prserve.

0,25 0,25

Exercice 3 On croit que le modle ci-dessous, reprsente la situation suivante : Dans une cole, les tudiants sinscrivent dans des ateliers, anim chacun par un ou plusieurs professeurs. Un professeur peut animer un ou plusieurs ateliers.

1,5pts

Universit Ibn Zohr Facult des Sciences Agadir Dept. Informatique Correction dExamen Base de donnes et SI Etudiant
Sinscrit

SMI5-2011/2012

Atelier

Professeur
1. Corriger ce modle pour quil reprsente bien la situation ci-dessus.

1pt
Atelier

Etudiant code_etu <pi> Entier <O> Identifiant_1 <pi>

1,n

est_inscrit

1,n

code_atelier <pi> Entier <O> Identifiant_1 <pi>

1,n est_anim

1,n Professeur code_prof <pi> Entier <O> Identifiant_1 <pi>

2.

Donner le modle logique correspondant au diagramme trouv la 1re question prcdente.


Etudiant est_inscrit code_etu INTEGER <pk,fk1> code_atelier INTEGER <pk,fk2> Atelier

0,5pt

code_etu INTEGER <pk>

code_atelier INTEGER <pk>

est_anim code_atelier INTEGER <pk,fk1> code_prof INTEGER <pk,fk2>

Professeur code_prof INTEGER <pk>