Vous êtes sur la page 1sur 7

Les contraintes dintegrit

Les donnes de la base doivent rester conformes la ralit quelles reprsentent. Ceci est ralis laide de la dfinition des contraintes dintgrit (CI). On distingue deux types de contraintes dintgrit : Les contraintes dintgrit statiques, Les contraintes dintgrit dynamiques. Les contraintes dintgrit statiques sont celles qui correspondent un prdicat sur ltat courant de la base. Les contraintes dintgrit dynamiques sont celles qui concernent le passage dun tat un autre. A tout instant de lexistence dune base de donnes, on doit pouvoir dfinir une nouvelle contrainte dintgrit. Le SGBD doit fournir des mcanismes pour vrifier que la base est cohrente vis vis de cette contrainte et laccepter ou la rejeter. Lorsquelle est accepte, une contrainte doit tre conserve dans un catalogue de la base.

Diffrents types de contraintes statiques: Unicit de la cl dune relation. Dans le langage SQL, cela est exprimable grce la commande CREATE UNIQUE INDEX : o chaque cration dun n-uplet il faut sassurer que la valeur de la cl nexiste pas dj dans la base. Contrainte dintgrit individuelle ou contrainte que doit vrifier un n-uplet individuellement. Il en existe de plusieurs sortes : plage de valeur, par exemple, 4.000 salaire 20.000 liste de couleurs possibles [bleu, rouge, vert, jaune] contraintes entre constituants : QTE-STOCK QTECOMMANDE contraintes de format : NOM CHAR(20) Dans le langage SQL, on dispose de linstruction : ASSERT <nom assertion> [on relation] : prdicat ;

Assurer que le matriau des pices ne peut prendre que quatre valeurs on crit : ASSERT CI1 ON PIECE : MATERIAU IN (fer, bronze, zinc, plomb) ;

Toute requte de modification est transforme avant son excution pour y faire apparatre la contrainte comme une condition sur la relation.
Contrainte intra-relation : 1.Cas o lon veuille contrler la valeur dun constituant dun n-uplet en fonction des valeurs de ce constituant pour les autres n-uplets : contrainte intra relation verticale. 2.De la mme manire, on pourra contrler la valeur dun constituant en fonction des valeurs apparaissant dans les autres constituants : contrainte intra-relation horizontale.

Exemple : Soit la relation dcrivant les employs et les rayon dun grand magasin : Employ(Nom, Salaire, Nom-Rayon) Rayon (Nom-Rayon, Etage, Recettes, Dpenses, Nb-Employs)
Un employ ne peut gagner plus du double de la moyenne des salaires de son rayon : ASSERT CI2 ON Employ E : Salaire 2 * (SELECT AVG (Salaire) FROM Employ WHERE Nom-Rayon = E.Nom-Rayon);

Pour exprimer que les dpenses doivent tre infrieures ou gales aux recettes, on crira : ASSERT CI3 On Rayon : Dpenses Recettes Contraintes sur lensemble de n-uplets : Avec la relation Employ, on veut exprimer la contrainte : " la moyenne des salaires des employs du rayon aliment doit tre infrieur 10.000". ASSERT CI4 ON Employ : 10.000 > (SELECT AVG (Salaire) FROM Employ WHERE Nom-Rayon = "Aliment"); Contraintes inter-relations : Dans une base de donnes les relations sont gnralement lies les unes aux autres. Exprimer le fait que tout rayon apparaissant dans la relation Employ est dcrit dans la relation Rayon, en SQL scrit : ASSERT CI5 (SELECT NOM-Rayon FROM Employ) IS IN (SELECT Nom-Rayon FROM Rayon);

Contraintes dintgrit dynamiques Contraintes sur le passage dun tat un autre : les n-uplets du nouvel tat dpendant de ceux de lancien. Pour exprimer une contrainte dynamique sur les valeurs, il faut pouvoir dans le langage relationnel faire une rfrence explicite lancienne valeur (OLD) et la valeur Nouvelle (New). Exprimer le fait que le salaire dun employ ne peut diminuer :
ASSERT CI6 ON UPDATE OF Employ (Salaire) NEW Salaire OLD Salaire; Remarquons ici que lon indique le moment o cette contrainte doit tre vrifie, savoir lors dune mise jour.

Un autre aspect des contraintes dintgrit dynamiques est celui qui consiste dfinir des actions spontanes qui seront dclenches automatiquement par le SGBD lorsque certains lments se produiront. Exemples : Exprimer que lorsquun nouvel employ est insr dans la base, le nombre demploys figurant dans la relation rayon doit augmenter de un pour le rayon du nouvel employ. Dans SQL, on dfinit alors une action spontane ou TRIGGER de la manire suivante : DEFINE TRIGGER EMPINS ON INSERTION OF Employ (UPDATE RAYON SET Nb-Employs = Nb-Employs + 1 WHERE Nom-Rayon = NEW Employ.Nom-Rayon); Pour la suppression : DEFINE TRIGGER EMPSUP ON DELETE OF Employ (UPDATE RAYON SET Nb-Employs = Nb-Employs 1 WHERE Nom-Rayon = OLD Employ.Nom-Rayon);

Pour les modification : DEFINE TRIGGER EMPMAJ ON UPDATE OF Employ (UPDATE RAYON SET Nb-Employs = Nb-Employs 1 WHERE Nom-Rayon = OLD Employ.Nom-Rayon UPDATE RAYON SET Nn-Employ = Nb-Employ + 1 WHERE Nom-Rayon = NEW Employ.Nom-Rayon); Contraintes diffres ou immdiates : Elle concerne le moment o elles doivent tre vrifies par le SGBD. Le qualificatif "immdiate" signifie que ds sa dfinition une contrainte dintgrit sera vrifie pour savoir si la base est cohrente. Par contre, une contrainte dintgrit peut tre diffre ce qui signifie que le test de cohrence de la base sera fait un autre moment qu la dfinition. Cette notion est lie au concept de transaction. Une transaction est une unit atomique dexcution. Elle doit effectuer plusieurs modification dans la base et ou bien toutes sont ralises ou bien aucune ne lest. Pendant lexcution dune transaction la base peut se trouver temporairement dans un tat incohrent et la vrification des contraintes dintgrit sera diffre aprs la fin de la transaction.