Vous êtes sur la page 1sur 32

Cours OMGL-Bases de Donnes SQL - Les contraintes

DUT Informatique Aymen Abedmouleh


aymen.abedmouleh@univ-lemans.fr

Cours de Claudine Piau-Toffolon


1

CONTRAINTES : Exemples
Chaque tudiant a un nom et un prnom:
Le champ Etu_Nom ne doit pas tre vide Le champ Etu_Prenom ne doit pas tre vide

Chaque tudiant a un numro de scurit sociale qui est unique :


Le champ Etu_NumSecu :
Ne doit pas tre vide Sa valeur doit tre unique
2

Introduction
L'une des ides fortes de la conception des BDR repose sur la notion de contrainte. Une contrainte n'est autre qu'une rgle imprative ne devant en aucun cas tre viole. Une bonne BD se doit de possder de nombreuses contraintes
Frdric BROUARD Architecte de Donnes, Enseignant CNAM, Ecoles dingnieurs,,
3

Rappel

Les contraintes
Travail de programmation allg En cas de violation d'une contrainte, le SGBDR envoie un vnement ou un message derreur lapplication Lapplication peut grer lerreur par un traitement appropri Si plusieurs applications crites par des quipes <> partageant les mmes donnes: la gestion des erreurs sera unique et facilitera lintgration des applications Il existe diffrentes faons de spcifier les contraintes
(CREATE TABLE, ALTER TABLE, CREATE DOMAIN,)
5

Les contraintes
Contraintes dclaratives

Contraintes algorithmiques : Lorsquun attribut de tel tuple de la table A est mj, il faut mj tel attribut de tel tuple de la table B et tel attribut dans tel tuple de la table C et ajouter un tuple dcrivant la modification prcdente dans la table D.

SOLUTION ??

Les contraintes dclaratives


Contraintes de domaine Contraintes dintgrit dentit

Contraintes dintgrit rfrentielle


Les assertions

EXEMPLE [Maree et al., 1998]


Table Magasins Table Clients Table Articles Table Fournisseurs Table Commandes Table Lig_Cmd Table_Livraisons Table Lig_Liv Table Assemblage
8

Les contraintes:
Clause CONSTRAINT
Le nom de la contrainte est spcifie par la

clause CONSTRAINT suivi du nom de la contrainte


Si on ne le fait pas ??????

1- Contraintes de domaine ou de colonne


[CONSTRAINT <nom_contrainte>] contrainte de nullit | contrainte dunicit | contrainte de cl trangre | contrainte check
contrainte de nullit [NOT] NULL contrainte d unicit [UNIQUE|PRIMARY KEY]

contrainte de cl trangre REFERENCES <nom_table> (col1[,col2])[ON DELETE CASCADE]


contrainte check CHECK (condition)

10

1- Contraintes de domaine:
La clause CHECK
Spcifie une contrainte qui doit tre vrifie tout moment par les tuples de la table
On peut placer un nombre qcq de clauses CHECK dans la dfinition des tables La clause peut se placer aprs la dfinition de tous les attributs, spare de la dfinition par une virgule

Exemples
11

Exemples
Clause CHECK
Table Clients Table Assemblage : le produit fini ne doit pas se contenir lui-mme Table Lig_cmd: qt livre <= qt cmde Remise au client ne peut tre > 20% prix catalogue Table Article: expliquez ! Table Lig_cmd: Ajouter la contrainte: Pour une qt commande >= 100 articles, la remise est au moins de 10%
On peut ajouter autant de contraintes que lon souhaite
12

Exemples
Clause CHECK
La clause CHECK peut comporter une expression de condition qcq: Ex: Table Clients:
CHECK (clt_nom IS NOT NULL) CONSTRAINT Nom_Clients; CHECK (clt_type BETWEEN 1 AND 4) CONSTRAINT Type_Clients;
13

1- Contraintes de domaine:
Dclaration dun domaine
Utile quand plusieurs attributs dun schma sont construits sur le mme domaine
Ex: CREATE DOMAIN Qte INTEGER DEFAULT 0 CHECK (VALUE >=0);
Vrifiera que art_stock, lcd_qte, lcd_liv, llv_qte sont des valeurs entires >=0 ou par dfaut =0. On redfinira ces attributs dans leurs tables respectives:
art_stock qte lcd_qte qte lcd_liv qte CHECK (lcd_liv <= lcd_qte) lig_qte qte

14

2- Contraintes dintgrit
Un attribut doit toujours avoir une valeur Un attribut (ou ensemble dattributs) constitu(en)t la cl de la relation Un attribut dans une table est li la cl primaire dune autre table (intgrit rfrentielle) Rgle sappliquant la valeur dun attribut (min et max par exemple) : clause CHECK NB: les contraintes sur les cls doivent tjs tre spcifies
15

2- Contraintes dintgrit: Contraintes dentit


Spcifie la cl primaire dune table:
doit toujours avoir une valeur dtermine et unique pour la table choisie parmi les cls candidates Clause: PRIMARY KEY

Exemples

16

3- Contraintes dIntgrit Rfrentielle


Concrtise les liens entre 2 tables Notion de cl trangre:=
Attribut ou groupe dattribut dans une table T1 dont les valeurs doivent exister comme valeurs de la cl candidate dans une table T2; T1 et T2 ne sont ncessairement distincte.
T1 Table rfrence: contient la cl candidate laquelle la cl trangre fait rfrence T2 Table qui rfrence: contient la cl trangre
17

3- Contr. dIntgrit Rfrentielle Exemples


En gnral: cl trangre rfrence directement la cl primaire de la table rfrence

Table Articles:
art_frs : cl trangre fait rfrence la cl primaire frs_num de la table Fournisseurs

Tables Lig_liv et Lig_cmd

18

Gestion de la contrainte IR
Sans intervention de lutilisateur: il faut vrifier que la nouvelle valeur de la cl trangre existe bien dans la table rfrence Il existe diffrentes manires de vrifier:
1. Par une fonction crite par le programmeur 2. Par le SGBD 3. Excution automatique dun Trigger appropri
19

Gestion de la contrainte IR
Sol 1: Fonction crite par le programmeur Solution la plus souple mais la plus fastidieuse:
la fonction doit tre prvue, dans chaque application, chaque fois quune valeur dune cl trangre risque dtre ajoute/modifie :

=> Risque derreur ou doubli

20

Gestion de la contrainte IR
Sol 2: Vrification automatique par le SGBD Solution idale:
la contrainte est dclare explicitement dans le dictionnaire et valable pour tous les programmes et les utilisateurs

Solution adopte par la plupart des SGBD

21

Gestion de la contrainte IR
Sol 3: Trigger Fonction compile, crite une fois pour toute, excute automatiquement chaque fois quune modification particulire a lieu dans une table

22

Gestion de la contrainte IR
Mise en uvre de la solution 2

Ajout de la clause REFERENCES la dfinition de la cl trangre: REFERENCES nom_table_rfrence (Cl_candidate)


Cl_candidate: nom explicite de la cl candidate facultatif (inutile quand il sagit de la cl primaire connue par le systme)

23

Gestion de la contrainte IR
Mise en uvre de la solution 2: Exemple
Table Commandes 2 cls trangres
cmd_clt: rfrence la cl primaire clt_num de la table Clients cmd_mag: rfrence la table Magasins
=>Si on veut ajouter ou modifier la valeur dune de ces cls trangres et que cette valeur nexiste pas comme valeur de cl primaire correspondante: moteur relationnel refusera la mj et enverra un message derreur
24

Gestion de la contrainte IR
Mise en uvre de la solution 2: Exemple
Si la cl trangre est constitue de plusieurs attributs: Clause FOREIGN KEY Exemple: Table Lig_liv: on ne peut livrer que ce que lon a

command! FOREIGN KEY (llv_cmd, llv_art) REFERENCES Lig_cmd


Rfrence la Cl primaire de Commandes Rfrence la cl primaire de Articles
25

Gestion de la contrainte IR
Clauses ON UPDATE, ON DELETE
Modifier ou supprimer la valeur dune cl primaire rfrence dans dautres tables Quadvient-il des lignes o apparat la valeur supprimer ou modifier?
Si on supprime un client: quadvient-il des commandes quil a passes? Des commandes en cours?

Bon sens: Ne pas permettre la suppression de la valeur de clt_num tant quil existe des commandes pour ce client
26

Gestion de la contrainte IR
Clauses ON UPDATE, ON DELETE
Reprsentation de cette contrainte dans la table Commandes:

On complte la clause REFERENCES par les clauses: ON UPDATE, ON DELETE Exemple: Table Articles

27

Gestion de la contrainte IR
Clauses ON UPDATE, ON DELETE
En cas de modification ou suppression dune valeur de la cl rfrence, si cette valeur existe en tant que cl trangre dans la table qui fait rfrence:
4 actions :
RESTRICT CASCADE SET NULL SET DEFAULT
28

Gestion de la contrainte IR
Clause ON DELETE
RESTRICT: donne un chec si la valeur efface correspond la cl de la table rfrence CASCADE: effacement en cascade des lignes correspondantes en cas deffacement dune ligne de la table rfrence SET NULL place une valeur nulle dans la ligne de la table en cas deffacement dune ligne de la table rfrence DEFAULT: place la valeur par dfaut
29

Gestion de la contrainte IR
Clause ON UPDATE
RESTRICT: donne un chec si la valeur modifie correspond la cl de table rfrence CASCADE: modification des lignes correspondantes en cascade en cas de modification dune ligne de la table rfrence SET NULL: place une valeur nulle dans la ligne de la table en cas de modification dune ligne de la table rfrence DEFAULT: place la valeur par dfaut
30

Gestion de la contrainte IR
Clause ON DELETE, ON UPDATE
RESTRICT: option par dfaut Valeur NULL: accepte dans les colonnes qui constituent la cl trangre Contraintes de rfrence ne sont vrifies que pour un tuple quand toutes les valeurs qui constituent la cl trangre sont diffrentes de NULL
31

Contraintes dclaratives ?
1. 2. 3. 4. Contrainte de domaine Contrainte de table Contrainte de cl Contrainte dassertion

Utilisation de la clause CONSTRAINT


1. 2. Obligatoire Non obligatoire

Est une contrainte dintgrit ?


1. 2. 3. Contrainte de cls Contrainte de table Contrainte de domaine
32

Vous aimerez peut-être aussi