Vous êtes sur la page 1sur 5

Elements Caracteristiques Libellé Type Nature

Produit - Id produit, -
Identifiant - Num elemantaire
- Référence, du produit - Alpha
- Désignation - Référence du numeriqu
produit e
- Désignation
du projet
Mouvement - IdMouv -identifiant du - Num elemantaire
- Entrée mouvement - Num
- Sortie - quantité du - Num
- Datecreation mouvment - Date
- quantité sortie
Historisation - idHisto - Identifant - Num elementaire
- nomuser historisatrion - A.Num
- Nom de
l’utilisateur
TRAVAUX DIRIGES DE BASE DE DONNEES AVANCEE.
1- Dictionnaire de données

 Nature : définie la manière avec laquelle les données font être récupérer

2- REDACTION DU MCD

prduit

idProduit

Reference Historisation
designation id
Histo
1.n
nomUser

1.1

subis

Mouvement concerne
idMouv

Entree

1.1 Sortie 1.n

DateCreation
3- SCHEMA BD (MLD)

Mouvement
Produit Historisation
idMouv
idProduit idHisto
idProduit
reference idMouv
entree
designation nomUser
sortie

dateCreation

4- Requêtes

Create DATABASE Quincaillerie ;

Create table PRODUIT (

idProduit int auto-incrément primary-key,

reference varchar (15),

designation varchar (15)

)engine = InnoDB ;

Create table MOUVEMENT (

idMouv int auto-increment primary-key,

idProduit int ,

entree int,

sortie int,

contraint

Foreign Key (idProduit) reference Produit (idProduit)

)engine==InnoDB ;

Create table HISTORISATION (

idHisto int auto-increment primary key,

idMouv int,
nomUser varchar (20),

contraint

Foreign Key (idMouv) references Mouvement (idMouv)

)engine= InnoDB ;

II- CONCETPS AVANCES

1. Bloc de code stocké dans la mémoire d’un SGBD qu’on appel en cas de besoin pour resoudre
un problème.
 Syntaxe d’une procédure stocké :
Create procedure nomProcedure (arguments)
Begin
******code sql*******
End ;
 Syntaxe d’une fonction stocké

Create function nomFonction (arguments) RETURNS char(5)

Begin

*****code sql*****

End ;

2. La transaction permet de vérifier que tout les requêtes sql s 'exécute ou rien ne s’exécute
(autocommit)
 Syntaxe d’une transaction

Set autocommit=0 ;

Start transaction ;

*****requête sql****

Commit ;

3. A = Atomicité (TOUT ou RIEN soit toutes les requêtes marchent soit rien ne marchent)

C= Cohérence (que la transaction ait réussie ou pas elle laisse la BD dans l’etat qu’elle la
trouvé)

I= Isolation ( pour éviter les conflits lorsque plusieurs users manipulent ma BD)

D= Durabilité ( les données sont enrégistré d’une manière permanente)

CAS PRATIQUE

Delimiter |

Create trigger AfterInsertMouvement after Insert on mouvement

For each row


Begin

Declare id Mint ;

Set idM=(selelct LAST.INSERT.ID() From mouvement) ; // creation de la variable

Select LAST.INSERT.ID() Into @From mouvement ; // creation de la variable

Insert into Historisation(idMouv, nomUser)

Values(idM, CURRENT.USER())

End |

Delimter ;

2. Le curseur n’est pas un objet qu’on peut créer indépendamment il existe déjà dans les procédures
stockées

Delimeter |

Create Procedure AfficheEntSor(in dateJ Date)

Begin

Declare stop in default 0 ;

Declare ent, sor int ;

Declare curEntSor CURSOR for Select entree, sortie from mouvement where dateJour
= dateJ ;

Declare continue handler for not found set stop=1 ;

Open curEnstSor ;

Boucle :Loop

FETCH  curEntSor ent, sor ;

If(stop=1) theen

Leaves boucles ;

Else

Select ent, sor ;

End if ;

End loop ;

Close curEntSor ;

Dellimeter ;

4. On doit utiliser la transaction

Code Sql :
Set autocommit=0 ;

Start transaction ;

Update mouvement set entree=entree-19 where idMouv =8 ;

Update mouvement set entree =19 where idMouv=7 ;

5. Utilisation de la vue.

Code sql :

Create View VueProduitMouvement AS select reference, designation, entre, sortie, dateJour from
Produit InnerJoin Mouvement on Produit.idProduit=Mouvement.idProduit ;

La différence entre la table et la vue est que la vue ne contient pas des données elle recupère les
données lorsqu’on l’éxecute