Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parAmaury Cordier Modifié depuis plus de 9 années
1
21/04/2015© Robert Godin. Tous droits réservés.1 6Gestion des contraintes d’intégrité en SQL n Contrainte d'intégrité statique – respectée pour chacun des états de la BD – mécanismes déclaratifs n PRIMARY KEY, UNIQUE, NOT NULL, DOMAIN, FOREIGN KEY, CHECK, ASSERTION – procédural n TRIGGER (SQL:1999) n Contrainte d'intégrité dynamique – contrainte sur changements d'états – référence aux états successifs – TRIGGER, REFERENCES ON DELETE…, ON UPDATE...
2
21/04/2015© Robert Godin. Tous droits réservés.2 6.1Contrainte de domaine n Types SQL – INTEGER – CHAR –... n NOT NULL n CHECK n CREATE DOMAIN
3
21/04/2015© Robert Godin. Tous droits réservés.3 6.1.1Contrainte NOT NULL n Par défaut : NULL
4
21/04/2015© Robert Godin. Tous droits réservés.4 6.1.2Contrainte CHECK sur une colonne n Le noClient est supérieur à 0 et inférieur à 100,000
5
21/04/2015© Robert Godin. Tous droits réservés.5 6.1.3Création d'un domaine (CREATE DOMAIN) Pas Oracle...
6
21/04/2015© Robert Godin. Tous droits réservés.6 6.1.4Valeur de défaut (DEFAULT)
7
21/04/2015© Robert Godin. Tous droits réservés.7 6.2Contrainte de clé primaire (PRIMARY KEY) n La clé primaire de la table Client est le noClient
8
21/04/2015© Robert Godin. Tous droits réservés.8 Clé primaire composée
9
21/04/2015© Robert Godin. Tous droits réservés.9 6.3Autres clés uniques (UNIQUE)
10
21/04/2015© Robert Godin. Tous droits réservés.10 6.4Contrainte d'intégrité référentielle (FOREIGN KEY REFERENCES) n Le noClient de la table Commande fait référence à la clé primaire noClient de la table Client n La table Client doit d ’abord être créée – privilège REFERENCES sur Client n PRIMARY KEY ou UNIQUE
11
21/04/2015© Robert Godin. Tous droits réservés.11 6.4.1Politique de gestion de la contrainte d'intégrité référentielle n Tentative de mise à jour de la clé primaire n Options – NO ACTION – CASCADE – SET NULL – SET DEFAULT
12
21/04/2015© Robert Godin. Tous droits réservés.12 6.4.1.1Politique NO ACTION n Rejet d ’une violation de la contrainte n Clause de défaut
13
21/04/2015© Robert Godin. Tous droits réservés.13 Cas du UPDATE
14
21/04/2015© Robert Godin. Tous droits réservés.14 6.4.1.2Politique CASCADE n Modification en cascade
15
21/04/2015© Robert Godin. Tous droits réservés.15 ON UPDATE CASCADE
16
21/04/2015© Robert Godin. Tous droits réservés.16 6.4.1.3Politiques SET NULL et SET DEFAULT
17
21/04/2015© Robert Godin. Tous droits réservés.17 SET DEFAULT
18
21/04/2015© Robert Godin. Tous droits réservés.18 6.4.1.4Clause MATCH PARTIAL/FULL
19
21/04/2015© Robert Godin. Tous droits réservés.19 Oracle n Défaut – ON DELETE NO ACTION – ON UPDATE NO ACTION n Supporte aussi – ON DELETE CASCADE – ON DELETE SET NULL (version 8i)
20
21/04/2015© Robert Godin. Tous droits réservés.20 6.5Autres contraintes n CHECK au delà d ’une colonne n ASSERTION générale
21
21/04/2015© Robert Godin. Tous droits réservés.21 6.5.1CHECK intra-ligne n Plusieurs colonnes de la même ligne n Les Articles dont le noArticle est supérieur à 90 ont un prix supérieur à $15.00
22
21/04/2015© Robert Godin. Tous droits réservés.22 6.5.2Check inter-ligne d'une même table n Concerne plusieurs lignes n Le prixUnitaire d'un Article ne peut dépasser le prix moyen de plus de $40.00 n Vérifié uniquement pour la ligne touchée – La contrainte peut être violée ! n Pas supporté par Oracle
23
21/04/2015© Robert Godin. Tous droits réservés.23 6.5.3CHECK inter-tables n Concerne plusieurs tables n Vérifié uniquement pour la ligne touchée – La contrainte peut être violée ! n Pas supporté par Oracle
24
21/04/2015© Robert Godin. Tous droits réservés.24 6.5.4Assertions générales n Le prixUnitaire moyen d'un Article ne peut dépasser $25.00 n Toujours valide par opposition au CHECK n Non supporté par Oracle
25
21/04/2015© Robert Godin. Tous droits réservés.25 Assertion inter-tables n La somme des quantitéLivrées pour une LigneCommande ne peut dépasser la quantité commandée
26
21/04/2015© Robert Godin. Tous droits réservés.26 6.6 Implémentation de la vérification des contraintes d'intégrité n Problème non trivial n Vérifier uniquement les lignes modifiées n Simplification différentielle n Simplification sémantique – mécanismes d ’inférence
27
21/04/2015© Robert Godin. Tous droits réservés.27 6.7Cohérence des contraintes d'intégrité n Impossible de mettre à jour Article avec : n Problème difficile en général n Aucune ou peu de vérification dans les SGBD actuels
28
21/04/2015© Robert Godin. Tous droits réservés.28 6.8Nom de contrainte (clause CONSTRAINT) n DROP CONSTRAINT contNoClient n SET CONSTRAINT contNoClient … n Identification de la contrainte qui est violée à l ’exécution
29
21/04/2015© Robert Godin. Tous droits réservés.29 6.9Contraintes déférées (SET CONSTRAINTS DEFERRED) n Quand vérifier ? n Une Commande ne peut exister sans LigneCommande associée n Vérification immédiate par défaut – impossible d ’ajouter une Commande + ses LigneCommandes …
30
21/04/2015© Robert Godin. Tous droits réservés.30 Clause DEFERRABLE n Solution au problème : n Ou INITIALLY DEFERRED
31
21/04/2015© Robert Godin. Tous droits réservés.31 6.10Gâchettes (TRIGGER) n Procédure – déclenchée par événement pré-déterminé (INSERT, DELETE, UPDATE) – exécutée au niveau serveur de BD n BD active n Utilité – maintien de contraintes d ’intégrité n statique n dynamique n alternative aux mécanismes déclaratifs (CHECK, ASSERTION,...) – préférer mécanisme déclaratif – maintien d ’éléments dérivés n colonnes dérivées n copies dans BD répartie n... – historique des mises à jour n AUDIT – sécurité
32
21/04/2015© Robert Godin. Tous droits réservés.32 Lorsqu'une augmentation du prixUnitaire d'un Article est tentée, il faut limiter l'augmentation à 10% du prix en cours
33
21/04/2015© Robert Godin. Tous droits réservés.33 6.10.1Utilisation d'un TRIGGER pour le maintien d'une contrainte d'intégrité dynamique n Empêcher une augmentation du prixUnitaire d'un Article au delà de 10% du prix en cours n Oracle – RAISE_APPLICATION_ERROR
34
21/04/2015© Robert Godin. Tous droits réservés.34 6.10.2Utilisation d'un TRIGGER pour le maintien d'une contrainte d'intégrité statique n 0 < noClient < 100000 n N.B. CHECK est préférable !
35
21/04/2015© Robert Godin. Tous droits réservés.35 6.10.3Étude de cas n Lors d'une nouvelle livraison, la quantité à livrer ne peut dépasser la quantité en stock disponible
36
21/04/2015© Robert Godin. Tous droits réservés.36 CHECK SQL2 inadéquat
37
21/04/2015© Robert Godin. Tous droits réservés.37 Lors d'une modification d'une quantitéLivrée, la différence entre la nouvelle quantitéLivrée et l'ancienne quantitéeLivrée doit être inférieure ou égale à la quantitéEnStock
38
21/04/2015© Robert Godin. Tous droits réservés.38 Ne permettre que la modification de la quantitéLivrée dans la table DétailLiraison
39
21/04/2015© Robert Godin. Tous droits réservés.39 Ajuster la quantitéEnStock
40
21/04/2015© Robert Godin. Tous droits réservés.40 Extension procédurale pour corpsTrigger n Traitements complexes n Combiner plusieurs TRIGGER – vérifier quel est l ’événement déclencheur n Ordre d ’exécution des TRIGGER – BEFORE avant AFTER,... – entre TRIGGER de même type ? n forcer un ordre en combinant n Oracle – PL/SQL
41
21/04/2015© Robert Godin. Tous droits réservés.41 6.10.4TRIGGER de niveau STATEMENT n Exécution du corps une seule fois pour plusieurs lignes mises à jours dans le même énoncé
42
21/04/2015© Robert Godin. Tous droits réservés.42 6.10.5Ordre d'exécution des TRIGGER n Attention aux circularités !
43
21/04/2015© Robert Godin. Tous droits réservés.43 6.10.6Limites des TRIGGER n Ne peuvent être DEFERRED n Complexes à coder n Contraintes particulières aux dialectes
44
21/04/2015© Robert Godin. Tous droits réservés.44 6.10.7 Particularités des TRIGGER Oracle n Pas de SELECT dans le WHEN n :NEW, :OLD n Omettre le mot-clé ROW dans REFERENCING n Corps en PL/SQL (voir chapitre 4). n Syntaxte :nomColonne n Pas de COMMIT/ROLLBACK dans un TRIGGER – procédure PL/SQL RAISE_APPLICATION_ERROR n IF INSERTING, DELETING, UPDATING. n Événements non standards – INSTEAD OF, STARTUP, LOGON,... n Problème avec table en mutation (modifée par l'événement déclencheur) n etc.
47
21/04/2015© Robert Godin. Tous droits réservés.47 Trigger INSTEAD OF pour VIEW non modifiable (non standard SQL:1999)
48
21/04/2015© Robert Godin. Tous droits réservés.48 suite
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.