Vous êtes sur la page 1sur 13

ROYAUME DU MAROC

Office de la Formation Professionnelle et de la Promotion du Travail

Gestion des contraintes

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION


SECTEUR NTIC
Gestion des contraintes

Sommaire

1. Introduction ____________________________________________________________ 2
2. Contraintes ____________________________________________________________ 2
2.1. Contraintes d'Intgrit des Donnes _________________________________________ 2
2.2. DEFAULT ______________________________________________________________ 4
2.3. La contrainte NOT NULL _________________________________________________ 4
2.4. La Contrainte PRIMARY KEY _____________________________________________ 4
2.4.1. IDENTITY (proprit) ________________________________________________________ 4
2.5. La Contrainte de Cl UNIQUE _____________________________________________ 5
2.6. La Contrainte FOREIGN KEY _____________________________________________ 5
2.6.1. Exemples de dfinitions de contrainte rfrentielle __________________________________ 7
2.7. La contrainte CHECK ____________________________________________________ 7
2.8. Ajout d'une Contrainte ____________________________________________________ 8
2.9. Suppression d'une Contrainte ______________________________________________ 9
2.10. Dsactivation et Activation d'une Contrainte _______________________________ 10
2.11. Affichage des contraintes dfinies ________________________________________ 11
3. Rsum ______________________________________________________________ 11

Document Millsime Page


OFPPT @ C-C-002 janvier 08 1 - 13
Gestion des contraintes

1. Introduction
Dans ce chapitre, vous allez apprendre implmenter des rgles de
gestion en utilisant les contraintes d'intgrit quelles soient rfrentielles
ou sur domaine.
A la fin de ce chapitre, vous saurez :
Dfinir les contraintes
Crer des contraintes et les maintenir

2. Contraintes
SQL Server fait appel des contraintes pour empcher l'entre de
donnes incorrectes dans des tables. Il sagit dune approche non
spcifique SQL Server mais mis en uvre par tous les SGBD conformes
au modle relationnel et la norme SQL.

Vous pouvez utiliser des contraintes pour :

Appliquer des rgles au niveau d'une table chaque fois qu'une ligne
est insre, mise jour ou supprime dans cette table. La
contrainte doit tre satisfaite pour que l'opration russisse.
Empcher la suppression d'un enregistrement si il y a une
dpendance avec un autre enregistrement de la table en relation.
Eviter la suppression d'une table dont dpend une autre table.
Appliquer des rgles aux valeurs insres dans une colonne pour
vrifier quelles sont conformes aux rgles dfinies

2.1. Contraintes d'Intgrit des Donnes

Les contraintes contrlent des rgles de gestion au niveau d'une table.


Les contraintes empchent la suppression d'une table lorsqu'il existe des
dpendances.
Types de contraintes valides dans Oracle :
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK

Conventions Applicables aux Contraintes

Toutes les contraintes sont stockes dans le dictionnaire de donnes.


Elles seront trs faciles manipuler si vous leur donnez un nom parlant.
Par dfaut le systme attribue un nom constitu partir du nom des
objets concerns et une rfrence ordinale.

Document Millsime Page


OFPPT @ C-C-002 janvier 08 2 - 13
Gestion des contraintes

Les noms de contraintes sont soumis aux conventions de dnomination


des objets Sql Server.
Il est possible de dfinir les contraintes au moment de la cration de la
table ou par la suite. Il est prfrable car plus simple de procder la
mise en uvre des contraintes dans un deuxime temps.

Une contrainte peut tre dfinie au niveau table ou colonne en fonction


de sa nature.

Dans cette syntaxe :

schema nom du propritaire de la table


table nom de la table
DEFAULT expr valeur par dfaut utiliser si une valeur est omise dans
l'ordre INSERT

column nom de la colonne


datatype type de donnes et longueur de la colonne
column_constraint contrainte d'intgrit incluse dans la dfinition de
la colonne
table_constraint contrainte d'intgrit incluse dans la dfinition de
la table

CREATE TABLE [schema.]table


(column datatype [DEFAULT expr]
[column_constraint],

[table_constraint]);

CREATE TABLE emp(


empno INTEGER,
ename VARCHAR(10),

deptno INTEGER NOT NULL,
CONSTRAINT emp_empno_pk
PRIMARY KEY (EMPNO));

Syntaxe de cration dune contrainte :

constraint_name nom de la contrainte


constraint_type type de contrainte

Contrainte au niveau colonne


column [CONSTRAINT constraint_name] constraint_type,

Contrainte au niveau table


column,...
[CONSTRAINT constraint_name] constraint_type
(column, ...),

Document Millsime Page


OFPPT @ C-C-002 janvier 08 3 - 13
Gestion des contraintes

2.2. DEFAULT
Spcifie la valeur fournie pour la colonne lorsque vous n'avez pas spcifi
explicitement de valeur lors d'une insertion. Les dfinitions de valeurs par
dfaut peuvent s'appliquer toutes les colonnes, except aux colonnes
Timestamp, ou celles dfinies avec la proprit IDENTITY.
Les dfinitions de valeurs par dfaut sont abandonnes lorsque la table
est supprime.
Seule une valeur constante, telle qu'une chane de caractres, une
fonction systme comme SYSTEM_USER() ou la valeur NULL, peut tre
utilise comme valeur par dfaut.
Vous pouvez affecter un nom de contrainte une valeur DEFAULT.

2.3. La contrainte NOT NULL


NULL et NOT NULL
Mots cls dterminant si les valeurs NULL sont permises ou non dans une
colonne. NULL. La contrainte NOT NULL interdit la prsence de valeurs
NULL dans la colonne laquelle elle s'applique.
Par dfaut, les colonnes qui ne sont pas associes la contrainte NOT
NULL peuvent contenir des valeurs NULL.
Interdit la prsence de valeurs NULL dans la colonne

2.4. La Contrainte PRIMARY KEY


Une contrainte PRIMARY KEY cre une cl primaire pour la table. Une
seule cl primaire peut tre cre par table.
Contrainte assurant l'intgrit de l'entit d'une colonne ou de plusieurs
colonnes donnes au moyen d'un seul index. Elle tablit une rgle
d'unicit de la colonne ou d'une combinaison de colonnes et garantit
qu'aucune colonne faisant partie de la cl primaire ne contient de valeur
NULL.

2.4.1. IDENTITY (proprit)


Cre une colonne d'identit dans une table. Cette proprit est utilise
avec les instructions. Permet dincrmenter automatiquement la valeur
des cls primaires par incrmentation.

IDENTITY [ ( seed , increment ) ]


seed
Valeur utilise pour la toute premire ligne charge dans la table.
increment
Valeur d'incrment ajoute la valeur d'identit de la ligne
prcdemment charge.
Vous devez spcifier la fois la valeur initiale et l'incrment, ou aucune
des deux. Si vous n'en spcifiez aucune, la valeur par dfaut est (1,1).

Cette proprit est associe la colonne lors de la cration de la table :

[IdContact] [int] IDENTITY (1, 1)

Document Millsime Page


OFPPT @ C-C-002 janvier 08 4 - 13
Gestion des contraintes

2.5. La Contrainte de Cl UNIQUE

Une contrainte d'intgrit de type cl UNIQUE exige que chaque valeur


dans une colonne ou dans un ensemble de colonnes soit unique, c'est--
dire qu'elle n'existe pas dans plusieurs lignes pour la colonne ou
l'ensemble de colonnes spcifis.
Une table peut comprendre plusieurs contraintes UNIQUE.

2.6. La Contrainte FOREIGN KEY

La contrainte FOREIGN KEY, ou contrainte d'intgrit rfrentielle,


dsigne une colonne ou une combinaison de colonnes comme tant une
cl trangre et tablit une relation avec une cl primaire ou une cl
unique de la mme table ou d'une table diffrente.
Dans l'exemple ci-dessus, la colonne DEPTNO a t dfinie comme cl
trangre dans la table EMP (table dpendante ou
enfant) ; elle fait rfrence la colonne DEPTNO de la table DEPT (table
de rfrence ou parent).
Une valeur de cl trangre doit obligatoirement correspondre une
valeur existante de la table matre ou tre NULL.
Les cls trangres sont bases sur des valeurs de donnes et sont des
pointeurs purement logiques et non physiques.

Les contraintes FOREIGN KEY peuvent tre dfinies au niveau table ou


colonne. Une cl trangre compose se cre au moyen de la dfinition
de niveau table.
L'exemple ci-dessus dfinit une contrainte FOREIGN KEY pour la colonne
DEPTNO de la table EMP. Le nom de la contrainte est EMP_DEPTNO_FK.

La cl trangre est dfinie dans la table dtail et la table contenant la


colonne rfrence est la table matre. Pour dfinir la cl trangre, on
utilise une combinaison des mots-cls suivants :

FOREIGN KEY (job_id) REFERENCES jobs(job_id)

FOREIGN KEY dfinit une colonne de la table dtail dans une


contrainte de niveau table.
REFERENCES identifie la table et la colonne dans la table matre.

ON DELETE CASCADE

Indique qu'en cas de tentative de suppression d'une ligne possdant une


cl rfrence par des cls trangres dans des lignes d'autres tables,
toutes les lignes contenant ces cls trangres sont galement
supprimes. Si des actions d'intgrit rfrentielle en cascade ont
galement t dfinies sur les tables cible, ces actions sont galement
excutes pour les lignes supprimer de ces tables.

Document Millsime Page


OFPPT @ C-C-002 janvier 08 5 - 13
Gestion des contraintes

ON UPDATE CASCADE

Spcifie qu'en cas de tentative de mise jour, dans une ligne, d'une
valeur de cl rfrence par des cls trangres dans des lignes d'autres
tables, toutes les valeurs de cl trangre sont galement mises jour et
remplaces par la nouvelle valeur spcifie pour la cl.
Si des actions d'intgrit rfrentielle en cascade ont galement t
dfinies sur les tables cible, ces actions sont galement excutes pour
les valeurs de cl mettre jour dans ces tables.

A noter : Les suppressions en Cascade ou les mises jour de cl en


cascade sont contraire lesprit du relationnel : en particulier la mise
jour des cls en Cascade : Une cl est par dfinition stable et immuable :
elle ne doit jamais changer !

Document Millsime Page


OFPPT @ C-C-002 janvier 08 6 - 13
Gestion des contraintes

FOREIGN KEY
Dfinit la colonne dans la table dtail dans une contrainte de
niveau table
REFERENCES
Identifie la table et la colonne de la table matre
ON DELETE CASCADE
Autorise la suppression dune ligne dans la table matre et des
lignes dpendantes dans la table dtail

2.6.1. Exemples de dfinitions de contrainte rfrentielle

2.7. La contrainte CHECK

La contrainte CHECK dfinit une condition que chaque ligne doit


obligatoirement satisfaire. La condition peut utiliser les mmes
constructions que les conditions d'une requte.

Une colonne peut possder un nombre illimit de contraintes CHECK


et la condition peut inclure plusieurs expressions logiques
combines par AND et OR. S'il existe plusieurs contraintes CHECK
pour une mme colonne, elles sont valides dans l'ordre de leur
cration.
La condition de recherche doit correspondre une expression
boolenne et ne peut pas faire rfrence une autre table.
Une contrainte CHECK de niveau colonne ne peut faire rfrence
qu' la colonne contenant la contrainte, et une contrainte CHECK de
niveau table ne peut faire rfrence qu'aux colonnes d'une mme
table.
Les contraintes CHECK et les rgles servent toutes les deux valider
les donnes lors des instructions INSERT et DELETE.

Document Millsime Page


OFPPT @ C-C-002 janvier 08 7 - 13
Gestion des contraintes

Quand il existe une rgle et une ou plusieurs contraintes CHECK


pour une colonne, toutes les restrictions sont values.
Exemples :
state IN {'NY',YO,KA}
Ou, pour s'assurer que les utilisateurs ne spcifient que des valeurs 5
chiffres dans la colonne Code Postal, tapez :
CodePostal LIKE '[0-9][0-9][0-9][0-9][0-9]'

2.8. Ajout d'une Contrainte

Vous pouvez ajouter des contraintes dans une table existante en utilisant
l'ordre ALTER TABLE avec la clause ADD.
Syntaxe :

table nom de la table


constraint nom de la contrainte
type type de contrainte
column nom de la colonne concerne par la contrainte

Il est recommand de prciser le nom de la contrainte, mme si ce n'est


pas obligatoire. A dfaut, le systme gnrera lui-mme des noms de
contraintes.

Conseils :

Vous pouvez ajouter, supprimer, activer ou dsactiver une


contrainte, mais il est impossible d'en modifier la structure.
Vous pouvez ajouter une contrainte NOT NULL une colonne
existante en utilisant la clause MODIFY la place de la clause ADD
de l'ordre ALTER TABLE.

Remarque : Vous pouvez dfinir une colonne NOT NULL seulement si la


table est vide, ou bien si vous spcifiez une valeur par dfaut, celle-ci
sera alors automatiquement attribue toutes les lignes existantes de la
table.

ALTER TABLE table


ADD [CONSTRAINT constraint] type (column);

Vous pouvez ajouter ou supprimer une contrainte, mais pas la modifier


Vous pouvez activer ou dsactiver des contraintes
Pour ajouter une contrainte NOT NULL, utilisez la clause MODIFY

Ajout d'une Contrainte

L'exemple ci-dessus cre une contrainte FOREIGN KEY dans la table EMP.
Cette contrainte vrifie qu'un manager existe en tant qu'employ valide
dans la table EMP.

Document Millsime Page


OFPPT @ C-C-002 janvier 08 8 - 13
Gestion des contraintes

Ajouter une contrainte FOREIGN KEY la table EMP prcisant qu'un


manager doit dj exister dans la table EMP en tant qu'employ valide.

ALTER TABLE emp


ADD CONSTRAINT emp_mgr_fk
FOREIGN KEY(mgr) REFERENCES emp(empno);

2.9. Suppression d'une Contrainte

Si vous souhaitez supprimer une contrainte, vous pouvez en retrouver le


nom dans les vues du dictionnaire de donnes USER_CONSTRAINTS et
USER_CONS_COLUMNS.
Utilisez ensuite l'ordre ALTER TABLE avec la clause DROP. L'option
CASCADE de la clause DROP provoque galement la suppression de
toutes les contraintes associes.

Syntaxe

ALTER TABLE table


DROP PRIMARY KEY | UNIQUE (column) |
CONSTRAINT constraint [CASCADE];

o : table reprsente le nom de la table


column reprsente le nom de la colonne concerne par la
contrainte
constraint reprsente le nom de la contrainte
Lorsque vous supprimez une contrainte d'intgrit, elle n'est plus
contrle par Oracle Server et nexiste plus dans le dictionnaire de
donnes.

Supprimer de la table EMP la contrainte concernant le manager.

ALTER TABLE emp


DROP CONSTRAINT emp_mgr_fk;

Supprimer la contrainte PRIMARY KEY de la table DEPT, ainsi que la


contrainte FOREIGN KEY associe dfinie sur la colonne EMP.DEPTNO.

ALTER TABLE dept


DROP PRIMARY KEY CASCADE;

Document Millsime Page


OFPPT @ C-C-002 janvier 08 9 - 13
Gestion des contraintes

2.10. Dsactivation et Activation d'une Contrainte


Uniquement valable avec les contraintes CHEK ou FOREIGN KEY

{ CHECK | NOCHECK} CONSTRAINT

Spcifie si constraint_name est activ ou dsactiv.


Si la contrainte est dsactive, les insertions et mises jour ultrieures
ne sont pas valides par rapport aux conditions de la contrainte. Cette
option peut uniquement tre utilise avec les contraintes FOREIGN KEY et
CHECK.

ALL
Spcifie que toutes les contraintes sont dsactives l'aide de l'option
NOCHECK ou actives l'aide de l'option CHECK.

Il est intressant de pouvoir dsactiver une contrainte sans la supprimer


(ce qui vite d'avoir la recrer) en utilisant l'ordre ALTER TABLE

Document Millsime Page


OFPPT @ C-C-002 janvier 08 10 - 13
Gestion des contraintes

2.11. Affichage des contraintes dfinies


Pour afficher les contraintes dfinies sur les colonnes dune table,
excutez la procdure stocke Sp_HelpContrainst avec en paramtre le
nom de la table.

3. Rsum
Vous pouvez crer des contraintes de type :
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK

Document Millsime Page


OFPPT @ C-C-002 janvier 08 11 - 13
Gestion des contraintes

Pour approfondir le sujet.


Site de rfrence de Microsoft Portail / SQL Server 2005

Site Dvelopper.com

Site de SupInfo

Auteurs et sources de rfrence


Documentation Microsoft SQL Server 2000, 2005 et 2008 (bta)

Document Millsime Page


OFPPT @ C-C-002 janvier 08 12 - 13

Vous aimerez peut-être aussi