Vous êtes sur la page 1sur 42

Bases de Donnes actives et

Intgrit

Introduction
Les donnes dans une BD ne sont pas indpendantes . Elles
obissent des rgles smantiques (contraintes dintgrit),
cest pourquoi un SGBD doit garantir la cohrence lors de la
mise jour.
Ces rgles peuvent tre dclares explicitement et
mmorises dans le dictionnaire de donnes.
Le modle relationnel supporte diffrents types de
contraintes. Quelque soit la complexit de la contrainte, le
problme est de rejeter les m..j qui la violent.
Il existent diffrentes techniques fondes sur :
La prvention qui empche la m.a.j non valide de se produire
La dtection qui vont dfaire les transactions incorrectes.
2

Typologie des contraintes dintgrit


Les contraintes dintgrit portent sur deux types
de proprits, les proprits statiques entre
donnes et les proprits dynamiques
dvolution des donnes.

Les contraintes structurelles

Ce sont des contraintes qui sappliquent sur


des structures de base (table, colonne,
attribut). Elles sont gnralement statiques,
et elles permettent dans le modle
relationnel dexprimer explicitement
certaines proprits de relation et de
domaine.

Les contraintes structurelles


Contrainte dentit : Contrainte dintgrit qui
impose que toute relation possde une cl primaire
et que tout attribut participant cette cl primaire
soit non NULL
Contrainte rfrentielle : cest une contrainte
dintgrit qui impose que la valeur dun attribut ou
dun groupe dattributs apparaisse comme valeur de
cl dans une autre relation. (Cl trangre)
Lajout, dans une relation rfrenante, nest possible que
si la valeur de la cl trangre existe dj dans la relation
rfrence.
La suppression, dans la relation rfrence, impose la
suppression de toutes les rfrences cette valeur dans
les relations rfrenantes.
5

Les contraintes structurelles


Contrainte de domaine : contrainte dintgrit
qui restreint la plage de valeurs dun domaine.
Les valeurs dun attribut dune relation doivent
alors, respecter une assertion logique (ex :
age<100 ou non nullit dun attribut.
Contrainte de non nullit : Spcifie que la valeur
dun attribut doit tre renseigne (nom, prnom)

Les contraintes non structurelles


Ces contraintes sont non inhrentes au modle
de donnes, elles traitent gnralement
lvolution des donnes suite aux m..J ce sont
des contraintes de comportement.
Dfinition : Cest une Contrainte dintgrit
exprimant une rgle sur lvolution des donnes
lors de la m..J.
Ces contraintes ne font pas partie intgrante du
modle relationnel et ne sont donc pas dfinies
par la commande CREATE TABLE mais par CREATE
ASSERTION.
7

Les contraintes non structurelles


Les Dpendances fonctionnelles : Exprime lexistence
dune dpendance fonctionnelle qui permet de dterminer
les valeurs dun groupe dattributs partir des valeurs dun
autre groupe dattributs.
Les dpendances multivalues : Cest une gnralisation
de la dpendance fonctionnelle. On dit que X --->> Y (X
multi dtermine Y) dans une relation R si pour toute valeur
de X, correspond un ensemble de valeurs de Y,
indpendamment des autres attributs de la relation R.
(Exemple : section -->> groupes)
Les dpendances dinclusion : elles permettent dexprimer
que les valeurs dun groupe de colonnes dune table doivent
rester incluses dans un groupe de colonnes dune autre
table. Elles gnralisent les contraintes rfrentielles. (Ex :
les banques de la table client doivent tre incluses dans les
banques de la table partenaires).
8

Les contraintes non structurelles


Les contraintes temporelles : ces contraintes
font intervenir le temps, en comparant lancienne
valeur dun attribut la nouvelle aprs m..j.
(ex : un age ne fait quaugmenter)
Les contraintes quationnelles : Compare deux
expressions arithmtiques calcules partir des
donnes de la base et de forcer lgalit ou
lingalit. La dimension temporelle peut tre
pris en compte en faisant intervenir des donnes
avant et aprs m..J. (Ex : montant facture avec
remise < montant facture)
9

Expression des contraintes en SQL2


La commande de cration de la table permet de crer la table tout en
tenant compte de certaines contraintes dintgrit structurelles.
CREATE TABLE <nom table>
({<Attribut> <Domaine> [<contrainte dattribut>]}+)
[<contrainte de relation>]

<Contrainte dattibut> ::=


NOT NULL|
UNIQUE | PRIMARY KEY
REFERENCES <relation> (<attribut>) |
CHECK <condition>

<contrainte de relation> ::=


UNIQUE (<Attribut>+) | PRIMARY KEY (<Attribut>+) |
FOREIGN KEY (<Attribut>+)
REFERENCES <relation> (<attribut>)
[ON DELETE {NO ACTION|CASCADE |SET DEFAULT |SET NULL }]
[ON UPDATE {NO ACTION|CASCADE |SET DEFAULT |SET NULL }]

10

Exemple
CREATE TABLE utilisation (
NChauff INT NOT NULL,
Nvehi INT NOT NULL REFERENCES voiture (Nvehi),
Date DEC (6) CHECK (Date BETWEEN 010109 AND 311210),
Dure SMALLINT DEFAULT 1,
PRIMARY KEY (Nchauff, Nvehi, date),
FOREIGN KEY Nchauff REFERENCES Chauffeur,
CHECK (duree BETWEEN 1 AND 8))

11

SQL2
ON DELETE et ON UPDATE permettent de prendre en
charge la contrainte dintgrit rfrentielle en
contrlant la suppression ou la mise jour de la cl
trangre:
NO ACTION : ne rien faire
CASCADE : supprimer ou faire les m..j. ncessaire en
cascade.
SET DEFAULT : indique quil faut remplacer la valeur de
la cl trangre dans la relation rfrenante par la
valeur par dfaut dclare dans CREATE
SET NULL : fait exactement la mme chose mais avec la
valeur NULL
12

SQL2
SQL2 permet de dclarer les autres contraintes par
une commande spare CREATE ASSERTION qui
peut tre vrifie automatiquement aprs chaque
m..J. signale par la clause AFTER ou en fin de
transaction avant la validation (BEFORE COMMIT).
La condition peut porter sur la relation entire
(option FOR), ou sur chaque ligne de la table (FOR
EACH ROW OF).

13

Assertion
CREATE ASSERTION <Nom contrainte>
[{BEFORE COMMIT | AFTER {
INSERT|DELETE|UPDATE
[OF <Attribut>]} ON <Relation>]
CHECK <Condition>
[FOR [EACH ROW OF] <Relation>]

14

Exemples
CREATE ASSERTION dureemax
AFTER INSERT OF duree ON utilisation
CHECK (SELECT SUM(duree) FROM utilisation
GROUP BY Nveh)<600
Une voiture ne peut tre utilise pour une dure
totale > 600 heures.
15

Exemples
CREATE ASSERTION section-verif
AFTER COMMIT
CHECK (SELECT Num-etud FROM section) IN
(SELECT num-etud FROM inscription)
FOR section
Les tudiants affects une section doivent tre
inscrits au pralable.
16

Base de donnes active


Une autre manire de protger la BD est
lutilisation de dclencheurs <triggers> qui
permettent de dclencher une opration
consquente suite une opration sur la BD. Ainsi
en surveillant les m..j et en dclenchant les effets
de bord, il est possible de maintenir lintgrit
dune BD.
.
17

Base de donnes active


Les SGBD traditionnels sont passifs, les dclencheurs
leurs apportent le comportement ractif des
applications, ils deviennent ainsi actifs et capables de
ragir aux vnements externes pour prserver
lintgrit des informations.
Des vnements tels que refuser de facturer un client
suspect, diter une commande en cas de rupture de
stock, pourront tre capturs directement par le
SGBD par les dclencheurs appropris.
Dfinition :
Une BD active est une BD dans laquelle le comportement
actif des applications est dplac dans le SGBD.
18

Triggers
Un dclencheur (ou triggers) est une rgle, dite
active, de la forme : vnement-condition-action.
Procdure stocke dans la base qui est dclenche
automatiquement par des vnements spcifis par
le programmeur et ne sexcutant que lorsquune
condition est satisfaite.

19

Utilit
Les dclencheurs permettent :
La possibilit dviter les risques dincohrence dus la
prsence de redondance.
Lenregistrement automatique de certains vnements.
La spcification de contraintes lies lvolution de
donnes.
Exemple : un salaire ne peut quaugmenter.

De dfinir toutes rgles complexes lies


lenvironnement dexcution (restrictions sur des
horaires, des clients, . . .).
20

Principe
Squence Evnement-Condition-Action :
Trigger dclench par un vnement spcifi par
le Programmeur
Insertion, destruction, modification sur une table.

Test de la condition : si cette dernire nest pas


vrifie, alors lexcution sarrte.
Si vrifie, laction est ralise (toutes oprations
sur la base de donnes).

21

Caractristiques
Un seul dclencheur par vnement sur une
table.
Les dclencheurs permettent de rendre une base
de donnes dynamique.
Une opration peut en dclencher dautres, qui ellesmmes peuvent entraner en cascade dautres
dclencheurs. . .

Ce mcanisme nest pas sans danger !


Risque de boucle infinie.

22

Caractristiques
Manipulation simultane de lancienne et de la
nouvelle valeur dun attribut ( tests sur
lvolution).
Un dclencheur peut tre excut :
Une fois pour un seul ordre SQL,
Ou chaque ligne concerne par cet ordre.

Laction peut tre ralise avant ou aprs


lvnement.

23

Caractristiques
Concernant action :
SQL nest pas procdural
Les SGBD fournissent une extension du langage
SQL
instructions de branchement conditionnel, instructions
de rptition, affectations, . . .

Langage impratif permettant de crer des


vritables procdures (procdures stockes)
PL/SQL pour ORACLE
PL/pgSQL pour PostgreSQL
T-SQL pour SQL Server
norme SQL2003 pour DB2 et MySQL5.

24

Cration dun dclencheur


Pour dfinir un dclencheur, il faut :
Spcifier lvnement qui dclenche laction en indiquant le
type de la mise jour (INSERT, UPDATE, DELETE), le nom de
la table et ventuellement le nom des attributs mis jour.
Indiquer si laction est ralise avant ou aprs.
Eventuellement, donner un nom lancien et au nouveau
n-uplet (uniquement le nouveau en cas dinsertion et
uniquement lancien en cas de suppression).
Dcrire la condition sous laquelle se dclenche lvnement
sous la forme dune expression SQL boolenne, c.--d. une
expression pouvant tre place dans une clause WHERE.
Dcrire laction raliser sous la forme dune procdure.
Indiquer si laction est ralise pour chaque n-uplet mis
jour ou une seule fois pour la requte.
25

Cration et suppression (ORACLE)

Recompilation : ALTER TRIGGER nom_trigger COMPILE ;


Activation/dsact. : ALTER TRIGGER nom_trigger
{ENABLE /DISABLE} ;
Suppression : DROP TRIGGER nom_trigger
26

Cration (ORACLE)
REPLACE : lorsque lon veut installer une nouvelle version
du trigger
BEFORE/AFTER : prcise le moment de dclenchement du
trigger (avant ou aprs)
DELETE/UPDATE/INSERT : prcise le ou les vnements
concerns par le dclenchement. Sil y a plusieurs
vnements, on les spare avec OR.
ON TABLE prcise le nom de la table concerne.
FOR EACH ROW : prcise si le trigger doit tre dclench
pour chaque ligne mise jour. Dans ce cas, il existe deux
variables :new et :old qui contiennent respectivement le
nouveau et lancien contenu de la ligne.
WHEN(condition) : laction peut ntre dclenche que
pour une partie des lignes mises jour.
27

Exemple utilis

28

Dclencheur : exemple 1
Vrification quun prix ne peut pas baisser.

29

Dclencheur : exemple 2
Dclencheur insrant un enregistrement lintrieur dune
seconde table Client100 lorsquune opration dinsertion sest
accomplie dans une premire table Client.
Il vrifie aussi si le nouveau n-uplet possde un attribut ca
suprieur ou gal 100

30

PL/SQL

31

PL/SQL: Dclrations

32

PL/SQL:assignation des variables

33

PL/SQL:assignation des variables

34

PL/SQL:structures de contrle

35

PL/SQL:boucles (for)

36

PL/SQL: boucles (while)

37

PL/SQL: gestion des erreurs

38

PL/SQL: gestion des erreurs(exemple)

39

PL/SQL: quelques procdures utiles

40

Exemple

41

Exemple
Interdire linsertion, la mise jour et la
suppression de donnes de la table emp aprs 18h
CREATE Trigger nmj_emp
Before insert or update or delete on emp
Begin
IF (TO_CHAR(sysdate,HH24)) > 18
Then
if inserting then Raise_application_error(-20501,Insertion Interdite);
Elseif updating then Raise_application_error(-20502,Mise jour Interdite);
Else
Raise_application_error(-20502,Suppresion Interdite);
end if;
End if;
End;
42