Vous êtes sur la page 1sur 3

Licence S5 Info- Conception de Base de Donnes

2015-2016

TP 3 : Conception de BD

Exercice 1: Rtro-ingnierie partir du code DDL


On considre une application utilisant une base de donnes relationnelle. On ne dispose
plus que des fragments de code ci-aprs, sans documentation . On se propose de
reconstituer le schma logique complet et un schma conceptuel de la base de donnes.
create table EMPLOYE (
NUME char(6) not null,
NOM char(30) not null,
ADRESSE varchar(60),
primary key(NUME));

create table NEGO_VENTE (


DATEN date not null,
DESTIN char(20) not null,
RESP char(6) not null,
OBJET char(10) not null,
foreign key (DESTIN)
references PROJET,
foreign key (RESP)
references EMPLOYE,
foreign key (OBJET)
references AFFAIRE);

create table HISTORIQUE (


CODE_E char(6) not null,
STAT varchar(60) not null,
DESCR varchar(200) not null,
primary key(CODE_E)
foreign key (CODE_E)
references EMPLOYE);

create unique index XPRO


on PROJET(NOMP);
create unique index XEMP
on EMPLOYE(NUME);
create unique index XHIS
on HISTORIQUE(CODE_E);
create unique index XTECH
on AGENT_CONTRACT (NUME);
create unique index XNEG
on NEGO_VENTE (DATEN,DESTIN,
RESP,OBJET);
create unique index XAFFAIRE
on AFFAIRE(NUMA);

create table PROJET (


NOMP char(20) not null,
STAFF char(110) not null,
primary key(NOMP));
create table AFFAIRE (
NUMA char(10) not null,
NOMA varchar(25) not null,
primary key(NUMA));

create table AGENT_CONTRACT (


NUME char(6) not null,
QUALIF char(10),
DATE_E date not null,
primary key(NUME),
foreign key (NUME)
references EMPLOYE);

create view EMP_HIST(NE)


as select NUME from EMPLOYE
where NUME not in
(select CODE_E from HISTORIQUE);
. . .
select 'Erreur : ', NE
from EMP_HIST;

procedure VI-PROJET(NOM_P:char[20])
variable section
MEMBRES :array[1:11] of
record DATE_DEBUT : date;
NE : char(6);
end-record;
NOM : char(30);
I : integer;

Licence S5 Info- Conception de Base de Donnes

2015-2016

body section
. . .
select STAFF into :MEMBRES from PROJET
where NOMA = :NOM_A;
if SQLCODE = 0 then
select NOM into :NOM from EMPLOYE
where NUME = :MEMBRES[1].NE;
display("Chef_de : ",NOM);
for I := 2 to 10 while MEMBRES[I].NE <> 0 do
select NOM into :NOM from EMPLOYE
where NUME = :MEMBRES[I].NE;
display("Assistant : ",NOM);
end-for
else
...
end-if;
[
end-procedure DISPL-PROJECT;

1. Proposer un premier schma partir de lanalyse du DDL (Data Definition Language)


relatif aux tables et aux index (schma physique des donnes).
2. Vous allez affiner ce schma en fonction des informations qui sont fournies dans la vue
EMPH-HIST et la procdure VI-PROJECT afin dobtenir un schma logique modlisation
vos schmas relationnels.
3. Produire le schma conceptuel des donnes.

Exercice 2 : Entrep
Soit le modle relationnel suivant :
Participant (matricule, nom, prenom, localite, code_entreprise);
Participer (code_cours, matricule);
Theme (code_theme, designation, code_categorie);
Entreprise (code_entreprise, nom, adresse);
Animateur (matricule_animateur, nom, prenom) ;
Animer (code_cours, matricule_animateur, nbr_heures);
Cours (code_cours, niveau, datecours, tarif_hr, prime_resp, droit_inscrip, code_theme);
Categorie (code_categorie, libelle);
1.
2.
3.
4.
5.

Indiquer, sil ya lieu, la ou les cls trangres


Crer le modle entit association correspondant au modle relationnel propos.
Gnrer le script SQL pour la cration de la base de donnes
Excuter le script dinsertion script_Entrep
La table cours contient lensemble des cours proposs avec leur tarif horaire. Le tarif
horaire des cours a augment. On se propose donc de modifier le tarif horaire comme
suit :

CREATE PROCEDURE maj_tarif (IN coef FLOAT)


BEGIN
UPDATE cours SET tarif_hr = tarif_hr * coef;
END
|

Licence S5 Info- Conception de Base de Donnes

2015-2016

La procedure maj_tarif est une procdure stocke1. MySQL permet de stocker, lintrieur
mme du systme de gestion de bases de donnes, des procdures crites dans un langage
de programmation tendant SQL. Une procdure stocke est dfinie comme suit :
CREATE PROCEDURE nom_procdure(paramtres)
BEGIN
dclarations
instructions
END;

Paramtres : liste des paramtres dentre (IN) et de sortie (OUT) de la procdure avec
leurs types SQL spars par des virgules.
Dclarations : dclarations de variables locales, termines par des points-virgules, de la
forme DECLARE nom type; , o nom est le nom de la variable (usuellement prfix de
v_) et type est un type SQL simple.
Une procdure est appele avec la commande CALL.
Crer et tester la procdure pour un coefficient gal 2.

6. A laide de procdures stockes, vous allez :


a. Dfinir une procdure anim_cours() qui permet dafficher les noms et prnoms
des animateurs qui ont anim un cours.
b. Dfinir une procdure affich_cours(IN code_cours) qui selon lidentifiant du cours
affiche les diffrents animateurs animant ce cours.
c. Dfinir une procdure new_anim permettant dinsrer un nouvel animateur dont
le matricule, le nom et le prenom sont passs en paramtre. Appeler la procdure
new_anim avec la valeur des paramtres suivants (2003, pliz, don).
d. Dfinir une procdure stocke Heure_cours qui retourne dans un paramtre le
nombre total dheures de cours anims.
e. Dfinir une procdure stocke verif_prix(IN Prix) qui vrifie si le prix pass en
paramtre correspond au moins un tarif horaire. Dans le cas o il correspond,
on affiche la liste des cours sinon les tarifs horaires des diffrents cours sont
retourns.

http://dev.mysql.com/doc/refman/5.7/en/create-procedure.html