Vous êtes sur la page 1sur 4

k

.

R
H
O
F
I
R

S
I
@
2
0
1
1
/
2
0
1
2

1
Exercice : Soit une partie dun schma donne comme suit :
COULEUR(Ref, Nom)
QUANTITE(#NouvCouleurs, #Elements, pourcentage)
1-Implantez le schma de la base de donnes sans les contraintes
Create database basededonnees;
Create table COULEUR ( REF CHAR(6),
NOM VARCHAR(30)) ;
Create table QUANTITE ( NOUVCOULEURS CHAR(6),
ELEMENTS CHAR(6),
POURCENTAGE NUMBER(5, 2)) ;
2 - Implantez les contraintes de clefs primaires et de clefs trangres.

alter table COULEUR add constraint CP_COULEUR primary key (REF) ;
alter table QUANTITE add constraint CP_POURCENTAGE primary key
(NOUVCOULEURS, ELEMENTS) ;
alter table QUANTITE add (constraint CE_QUANTITE_NOUVCOULEURS
foreign key (NOUVCOULEURS) references COULEUR (REF),
constraint CE_QUANTITE_ELEMENTS foreign key (ELEMENTS)
references COULEUR (REF)) ;


k
.

R
H
O
F
I
R

S
I
@
2
0
1
1
/
2
0
1
2

2
3 -Implantez les contraintes qui expriment que le NOM de la couleur est une
clef candidate.

alter table COULEUR modify NOM constraint NN_COULEUR_NOM not null ;
alter table COULEUR add constraint UNIQ_COULEUR_NOM unique (NOM) ;
4 - Implantez la contrainte qui exprime quun pourcentage est compris entre
0 et 100.

alter table QUANTITE add constraint CHK_QUANTITE_POURCENTAGE check
POURCENTAGE between 0 and 100 ;
5 - Implantez, si cela est possible, la contrainte indiquant que la somme des
pourcentages des composantes dune couleur ne peut excder 100%.

Une telle contrainte ne peut pas tre implante car une telle contrainte,
pour tre exprime, devra faire rfrence plusieurs tuples. Ce qui est
impossible en SQL.

k
.

R
H
O
F
I
R

S
I
@
2
0
1
1
/
2
0
1
2

3
6-Donnez la rfrence des couleurs primaires sans utiliser leur nom (minus,
not in).

select REF from COULEUR
minus
select NOUVCOULEURS from QUANTITE;

Ou
select REF from COULEUR
where REF not in ( select NOUVCOULEURS from QUANTITE) ;
7 - Donnez le nom des couleurs constitues uniquement avec des couleurs
primaires. On pourra rutiliser la rponse la question 6 pour obtenir les
couleurs primaires
select NOM from COULEUR
where not exists ( select ELEMENTS from QUANTITE
where NOUVCOULEURS = COULEUR.REF
minus
select REF from COULEUR
where REF not in ( select NOUVCOULEURS
from QUANTITE)) ;
k
.

R
H
O
F
I
R

S
I
@
2
0
1
1
/
2
0
1
2

4
8 - Donnez la composition du nomqlq1 . On mentionnera la rfrence de
llment, son nom et sa quantit.

select ELEMENTS, ELT.NOM, POURCENTAGE
from COULEUR BVD, COULEUR ELT, PARTICIPANT
where BVD.REF = NOUVCOULEURS
and ELEMENTS = ELT.REF
and BVD.NOM = nomqlq1 ;
9 - Donnez la rfrence des couleurs dont la composition est incomplte.
select NOUVCOULEURS from QUANTITE
group by NOUVCOULEURS
having sum(POURCENTAGE) <> 100 ;
3 - Donnez le nom de toutes les couleurs prsentes dans la base de donnes
par ordre alphabtique.

select NOM
from COULEUR
order by NOM ;