Vous êtes sur la page 1sur 7

Mme Grissa.

A Serie2

Bases de Données Avancées


SERIE 2

Description du monde Réel :


Il s'agit de concevoir une base de données pour la gestion de stock d’une société
Informatique.
La société gère les clients, des commandes passées par ces clients et des produits commandés par
ces clients. Ces produits ont été achetés de chez plusieurs fournisseurs.
Pour chaque client on désire mémoriser son numéro de carte d'identité (identifieur), son
nom, son prénom, son adresse et son numéro de téléphone. Un client peut passer plusieurs
commandes.
Pour chaque commande passée par un client, on désire mémoriser son numéro (identifieur), sa date
de commande et son état. Une commande peut porter sur plusieurs produits.
Chaque produit sera décrit par une ligne de commande. Une commande est formée par plusieurs
lignes de commandes. Dans chaque ligne de commande, on précise le numéro de la ligne de
commande, le code du produit commandé ainsi que la quantité commandée de ce produit.
Un produit est identifié par un code (identifieur), un libellé, un prix, une quantité seuil
(stock limite du produit) et la quantité dans le stock. Ces produits ont été achetés de chez plusieurs
fournisseurs.
Un fournisseur est décrit par un code (identifieur), un nom, une adresse et un numéro de
téléphone. Chaque fournisseur doit fournir un ou plusieurs produits au stock de la société. On
suppose qu’un produit est fourni par un seul fournisseur.

La société dispose d'un ensemble de règles de gestion définies comme suit:


1) - Une commande ne peut être passée que par un seul client.
2) - Une commande peut inclure plusieurs produit et, dans tous les cas, elle en inclut au
moins un. Un produit peut apparaître plusieurs fois dans une même commande.
3) - Un produit peut faire l'objet de plusieurs commandes différentes. Il peut également
exister dans la base sans n'avoir jamais été commandé.
4) - L’état de la commande peut prendre l’une des trois valeurs :
‘CE‘ : Commande En-cours.
’CLI’ : Commande Livrée,
’CNLI ’ : Commande Non Livrée

L’état de la commande prend en premier lieu une valeur par défaut ‘CE‘.
Si toutes les quantités des produits figurants dans la commande peuvent être livrées
pour la commande (QTESTK > QTE SEUIL après décrémentation)
alors l’état de la commande = ’C LI ’
sinon : dans le cas où la quantité en stock d’un produit devient <= QTE SEUIL,
les MAJ de cette commande sont annulés et l’état de la commande = ‘CNLI’.
Questions
Partie A)
1) Tracer le diagramme E/R correspondant au Modèle conceptuel de Données (MCD).
2) Donner le Schéma de cette base de données en modèle relationnel (les relations doivent
être en 3ème Forme Normale).
1
Mme Grissa.A Serie2
Partie B)
1) Ecrire une procédure PL/SQL qui permet d’afficher les informations d’un produits donné
(code_p, libellé, qte_stk, qte_seuil, nom_fournisseur).

2) Ecrire une fonction PL/SQL qui vérifie si la quantité dans le stock d’un produit donné est
supérieure à sa quantité seuil.

3) Ecrire une fonction PL/SQL Calcul_mnt_cmde qui retourne le montant total d’une commande
donnée. (Num_cmde est un paramètre en entrée).

4) Ecrire un programme PL/SQL qui permet d'automatiser une séquence d'Instructions.


L’utilisateur saisi le NCI d’un client. A partir du NCI client le programme affiche le nombre total
de commandes de ce client, détermine le numéro de sa dernière commande et calcule le montant de
cette dernière commande.

5) Ecrire une procédure PL/SQL Affi_Prod qui affiche la liste de tous les produits (code, libellé,
prix, qtestk), triés par ordre croissant du code du produit.

6) Ecrire une procédure PL/SQL qui permet de compter le nombre de produits où la quantité
dans le stock est supérieur à 30.

7) Ecrire une procédure PL/SQL qui permet d’afficher la liste des produits ayant une quantité dans
le stock inférieure ou égale à la quantité seuil (code du produit, nom du produit, numéro du
fournisseur, nom du fournisseur).

8) Modéliser l’opération de vente d’un produit de code cdp.

9) Modéliser l’opération de vente d’une commande de produits de numéro nm1.

10) Ecrire une procédure stockée qui permet d’afficher pour un produit donné les attributs:
code_p, libellé, prix, qte_stk et une mention sur la demande de ce produit (forte, moyenne, faible).
Une mention sur la demande est « forte » si la quantité du produits vendus dépasse 1000, elle est
« moyenne » si la quantité du produits vendus est compris entre 500 et 1000 et demande « faible »
sinon).

11) Ecrire un programme PL/SQL qui insert, pour chaque produit, les informations demandées par
le fournisseur (code_prd, libellé, prix, qte_stck) dans une autre table (préalablement créée dans le
programme).

12) Afin de raffiner l’analyse du profil de chaque client, le service marketing établit l’état suivant
pour ses clients : calculer pour chaque client le montant minimum, maximum et moyen de ses
commandes ainsi que le nombre total de commandes qui lui sont établies.
a) Ecrire les fonctions stockées qui retournent : le nombre de commandes, le montant moyen des
commandes, le montant maximum des commandes et le montant minimum des commandes
d’un client donné.
b) Ecrire un programme PL/SQL qui établit l’état décrit ci-dessus pour tous les clients.
Pour chaque client, on précise son numéro de carte d’identité, son nom, son prénom, son
nombre total de commandes, le montant minimum, le montant maximum et le montant
moyen de ses commandes.

13) Ecrire un programme PL/SQL qui génère une exception si la quantité stockée d’un produit est
inférieure ou égale à la quantité seuil.

2
Mme Grissa.A Serie2

Diagramme Entité / Relation


Date_cmd Etat
Prénom Adresse
Nom Num-cmd

Nci-cl Num-tel
el

Client (1, 1)
(0, N) Lance Commande

(1, N)

(1,
N)
Libelle Prix Qte-seuil Qtestk
LigneC
mde
Qte-cmd (1, 1)
Code-prd

(0, N) contien (1, 1) Ligne_Cmde


Produit t

(1, 1)
Num-lg-cmd
fournit

(1, N)

Fournisseur

Code-f Nom
Num-tel
Adresse

3
Mme Grissa.A Serie2
Modèle Relationnel

Client
Nci_cl Nom Prénom Adresse Num_tel

Commande
Num_cmd Date_cmd Etat Nci_cl

Fournisseur
Code_f Nom Adresse Num_tel

Produit
Code_prd Libelle Prix Qte_Seuil QteStk Code_f

Ligne_Cmde
Num_Lg-cmd Num_cmd Code_prd Qte_cmd

4
Mme Grissa.A Serie2

/** StockLDD.SQL **/


Alter table Client drop primary key cascade;
Alter table Commande drop primary key cascade;
Alter table Fournisseur drop primary key cascade;
Alter table Produit drop primary key cascade;
Alter table Ligne_Cmde drop primary key cascade;

Drop table Client;


Drop table Commande;
Drop table Fournisseur;
Drop table Produit;
Drop table Ligne_Cmde;

Create table Fournisseur


( Code_f Number(6) Not Null,
Nom varchar2(10),
Adresse varchar2(30),
Num_tel Number(8),
Constraint PK_Four primary key (Code_f)
);

Create table Client


( Nci_cl Number(6) Not Null,
Nom varchar2(10),
Prénom varchar2(10),
Adresse varchar2(40),
Num_tel Number(8),
Constraint PK_Cl primary key (Nci_cl)
);

Create table Commande


( Num_cmd Number(6) Not Null,
Date_cmd date,
Etat varchar2(4) CHECK (Etat in ('CE','CLI','CNLI') ),
Nci_cl Number(6),
Constraint PK_Cmmd primary key (Num_cmd),
Constraint FK1_Cmmd foreign key (Nci_cl ) references Client (Nci_cl )
);

Create table Produit


( Code_prd Number(6),
Libelle varchar2(10),
Prix Number(6,3),
Qte_seuil Number(2),
Qtestk Number(6),
Code_f number(6),
Constraint PK_Produit primary key (code_prd),
constraint FK_Produit foreign key (Code_f) references Fournisseur (Code_f)
);

Create table Ligne_Cmde


( Num_lg_cmd Number(2)not null,
Num_cmd Number(6) not null,
Code_prd Number(6)not null,
Qte_cmd number(3)not null,
Constraint PK_ligne primary key (Num_lg_cmd, Num_cmd),
constraint FK1_ligne foreign key (num_cmd) references Commande (Num_cmd),
constraint FK2_ligne foreign key (code_prd) references Produit (Code_prd)
);

5
Mme Grissa.A Serie2

/** StockLMD.SQL **/


/** StockLMD.SQL **/
delete from Ligne_Cmde;
delete from produit;
delete from Fournisseur;
delete from Commande;
delete from Client;

insert into Fournisseur values(123456,'Hexa','10 rue palestine',71811111);


insert into Fournisseur values(123457,'Mediastore','Mutuelleville',71500200);
insert into Fournisseur values(123458,'IBM', '25 Rue Marseille',71200098);

insert into Client values(125125,'Tlili','Salah','34 rue de la


sambre',71344444);
insert into Client values(126126,'Sayadi','Alia','20 rue el yassamine El
manar2',71200900);
insert into Client values(127127,'Ben salah','Sami','10 rue 10254,
Montfleury',72453111);

insert into Commande values(120,'10-12-99','CE',125125);


insert into Commande values(121,'17-10-99','CE',126126);
insert into Commande values(122,'10-01-01','CE',127127);

insert into Produit values(140, 'Produit00',500,5,100,123456);


insert into Produit values(141, 'Produit01',400,2,154,123457);
insert into Produit values(142, 'Produit02',300,10,100,123458);

insert into Ligne_Cmde values(1,120,140,12);


insert into Ligne_Cmde values(2,120,141,10);
insert into Ligne_Cmde values(3,120,142,20);

insert into Ligne_Cmde values(1,121,140,12);


insert into Ligne_Cmde values(2,121,142,20);

insert into Ligne_Cmde values(1,122,141,12);

6
Mme Grissa.A Serie2
SQL> select * from client;

NCI_CL NOM PRÉNOM ADRESSE


---------- ---------- ---------- ----------------------------------------
NUM_TEL
----------
125125 Tlili Salah 34 rue de la sambre
71344444

126126 Sayadi Alia 20 rue el yassamine El manar2


71200900

127127 Ben salah Sami 10 rue 10254, Montfleury


72453111

SQL> select * from Produit;

CODE_PRD LIBELLE PRIX QTE_SEUIL QTESTK CODE_F


---------- ---------- ---------- ---------- ---------- ----------
140 Produit00 500 5 100 123456
141 Produit01 400 2 154 123457
142 Produit02 300 10 100 123458

SQL> select * from fournisseur;

CODE_F NOM ADRESSE NUM_TEL


---------- ---------- ------------------------------ ----------
123456 Hexa 10 rue palestine 71811111
123457 Mediastore Mutuelleville 71500200
123458 IBM 25 Rue Marseille 71200098

SQL> select * from commande;

NUM_CMD DATE_CMD ETAT NCI_CL


---------- -------- ---- ----------
120 10/12/99 CE 125125
121 17/10/99 CE 126126
122 10/01/01 CE 127127

SQL> select * from ligne_Cmde;

NUM_LG_CMD NUM_CMD CODE_PRD QTE_CMD


---------- ---------- ---------- ----------
1 120 140 12
2 120 141 10
3 120 142 20
1 121 140 12
2 121 142 20
1 122 141 12

6 ligne(s) sélectionnée(s).

Vous aimerez peut-être aussi