Dans ce chapitre, vous allez apprendre à implémenter des règles de gestion en utilisant les contraintes d'intégrité qu’elles soient référentielles ou sur domaine.
A la fin de ce chapitre, vous saurez :
SQL Server fait appel à des contraintes pour empêcher l'entrée de données incorrectes dans des tables. Il s’agit d’une approche non spécifique à SQL Server mais mis en œuvre par tous les SGBD conformes au modèle relationnel et à la norme SQL.
Vous pouvez utiliser des contraintes pour :
Conventions Applicables aux Contraintes
Toutes les contraintes sont stockées dans le dictionnaire de données. Elles seront très faciles à manipuler si vous leur donnez un nom parlant.
Par défaut le système attribue un nom constitué à partir du nom des objets concernés et une référence ordinale.
Les noms de contraintes sont soumis aux conventions de dénomination des objets Sql Server. Il est possible de définir les contraintes au moment de la création de la table ou par la suite. Il est préférable car plus simple de procéder à la mise en œuvre des contraintes dans un deuxième temps.
Une contrainte peut être définie au niveau table ou colonne en fonction de sa nature.
Syntaxe :
CREATE TABLE table
(column datatype [DEFAULT expr]
[column_constraint],
…
[table_constraint]);
Dans cette syntaxe :
table nom de la table
column nom de la colonne
datatype type de données et longueur de la colonne
DEFAULT expr valeur par défaut à utiliser si une valeur est omise dans l'ordre INSERT column_constraint contrainte d'intégrité incluse dans la définition de la colonne table_constraint contrainte d'intégrité incluse dans la définition de la table
Exemple:
CREATE TABLE Emp(
EmpNo INT,
EmpName VARCHAR(10),
CatEmp VARCHAR(10) default 'salarie',
…
deptno INT NOT NULL,
CONSTRAINT Pk_Emp_Empno PRIMARY KEY (EMPNO));
Syntaxe de création d’une contrainte :
constraint_name nom de la contrainte
constraint_type type de contrainte
[CONSTRAINT constraint_name] constraint_type
(column, ...),
Spécifie la valeur fournie pour la colonne lorsque vous n'avez pas spécifié explicitement de valeur lors d'une insertion. Les définitions de valeurs par défaut peuvent s'appliquer à toutes les colonnes, excepté aux colonnes définies avec la propriété IDENTITY.
Seule une valeur constante, telle qu'une chaîne de caractères, une fonction système comme SYSTEM_USER() ou la valeur NULL, peut être utilisée comme valeur par défaut. Vous pouvez affecter un nom de contrainte à une valeur DEFAULT.
Exemple:
CREATE TABLE emp( empno INT IDENTITY(5,3), ename VARCHAR(10)
CONSTRAINT df_name DEFAULT 'xx',
deptno INT NOT NULL,
CONSTRAINT Pk_emp_empno
PRIMARY KEY (EMPNO))
NULL et NOT NULL : Mots clés déterminant si les valeurs NULL sont permises ou non dans une colonne.
La contrainte NOT NULL interdit la présence de valeurs NULL dans la colonne à laquelle elle s'applique.
Par défaut, les colonnes qui ne sont pas associées à la contrainte NOT NULL peuvent contenir des valeurs NULL.
Une contrainte PRIMARY KEY crée une clé primaire pour la table. Une seule clé primaire peut être créée par table.
Contrainte assurant l'intégrité de l'entité d'une colonne ou de plusieurs colonnes données au moyen d'un seul index. Elle établit une règle 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.
Exemple1:
Exemple2:
Crée une colonne d'identité dans une table. Cette propriété est utilisée avec les instructions. Permet d’incrémenter automatiquement la valeur des clés primaires par incrémentation.
IDENTITY [ ( seed , increment ) ]
Seed: Valeur utilisée pour la toute première ligne chargée dans la table.
Increment : Valeur d'incrément ajoutée à la valeur d'identité de la ligne précédemment chargée.
Vous devez spécifier à la fois la valeur initiale et l'incrément, ou aucune des deux. Si vous n'en spécifiez aucune, la valeur par défaut est (1,1).
Cette propriété est associée à la colonne lors de la création de la table :
[IdContact] [int] IDENTITY (1, 1)
[IdCostumer] [int] IDENTITY (7, 2)
Une contrainte d'intégrité 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 spécifiés. Une table peut comprendre plusieurs contraintes UNIQUE.
La contrainte FOREIGN KEY, ou contrainte d'intégrité référentielle, désigne une colonne ou une combinaison de colonnes comme étant une clé étrangère et établit une relation avec une clé primaire ou une clé unique de la même table ou d'une table différente.
Exemple :
FOREIGN KEY(DEPTNO) REFERENCES DEPT (DEPTNO)
Dans l'exemple ci-dessus, la colonne DEPTNO a été définie comme clé étrangère dans la table
EMP (table dépendante ou enfant) ; elle fait référence à la colonne DEPTNO de la table DEPT (table de référence ou parent).
Une valeur de clé étrangère doit obligatoirement correspondre à une valeur existante de la table maître ou être NULL.
Les clés étrangères sont basées sur des valeurs de données et sont des pointeurs purement logiques et non physiques.
Les contraintes FOREIGN KEY peuvent être définies au niveau table ou colonne. Mais une clé étrangère composée se crée au moyen de la définition de niveau table.
La clé étrangère est définie dans la table détail et la table contenant la colonne référencée est la table maître.
Pour définir la clé étrangère, on utilise une combinaison des mots-clés suivants :
ON DELETE (CASCADE, SET NULL, SET DEFAULT, NO ACTION)
ON UPDATE (CASCADE, SET NULL, SET DEFAULT, NO ACTION)
CASCADE
SET NULL
SET DEFAULT
NO ACTION
Exemple:
La contrainte CHECK définit une condition que chaque ligne doit obligatoirement satisfaire. La condition peut utiliser les mêmes constructions que les conditions d'une requête.
Exemples :
Check (state IN ('NY',’YO’,’KA’))
Ou, pour s'assurer que les utilisateurs ne spécifient que des valeurs à 5 chiffres dans la colonne Code Postal, tapez :
Check (CodePostal LIKE '[0-9] [0-9] [0-9] [0-9] [0-9]')
Vous pouvez ajouter des contraintes dans une table existante en utilisant l'ordre ALTER TABLE avec la clause ADD.
Syntaxe :
ALTER TABLE table
ADD [CONSTRAINT constraint] type (column); Où :
table nom de la table
constraint nom de la contrainte
type type de contrainte
column nom de la colonne concernée par la contrainte
• Vous pouvez ajouter ou supprimer une contrainte, mais pas la modifier • Vous pouvez activer ou désactiver des contraintes
Exemples1 :
ALTER TABLE emp
ADD CONSTRAINT fk_emp_mgr
FOREIGN KEY(mgr) REFERENCES emp(empno);
Ajout d'une Contrainte
L'exemple ci-dessus crée une contrainte FOREIGN KEY dans la table EMP. Cette contrainte vérifie qu'un manager existe en tant qu' « employé » valide dans la table EMP.
Ajouter une contrainte FOREIGN KEY à la table EMP précisant qu'un manager doit déjà exister dans la table EMP en tant qu'employé valide.
Exemples2 : (cas bibliothèque)
Si vous souhaitez supprimer une contrainte, vous pouvez en retrouver le nom dans les vues du dictionnaire de données 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 associées.
Syntaxe
ALTER TABLE table
DROP PRIMARY KEY | UNIQUE (column) |
CONSTRAINT constraint [CASCADE]; où : table représente le nom de la table
column représente le nom de la colonne concernée par la contrainte constraint représente le nom de la contrainte
Lorsque vous supprimez une contrainte d'intégrité, elle n'est plus contrôlée par SQL Server et n’existe plus dans le dictionnaire de données.
Supprimer de la table EMP la contrainte concernant le manager :
ALTER TABLE emp
DROP CONSTRAINT fk_emp_mgr;
Supprimer la contrainte PRIMARY KEY de la table DEPT, ainsi que la contrainte FOREIGN KEY associée définie sur la colonne EMP.DEPTNO.
ALTER TABLE dept
DROP PRIMARY KEY CASCADE;
Uniquement valable avec les contraintes CHECK ou FOREIGN KEY
{ CHECK | NOCHECK} CONSTRAINT
Spécifie si constraint_name est activé ou désactivé.
Si la contrainte est désactivée, les insertions et mises à jour ultérieures ne sont pas validées par rapport aux conditions de la contrainte. Cette option peut uniquement être utilisée avec les contraintes FOREIGN KEY et CHECK.
ALL
Spécifie que toutes les contraintes sont désactivées à l'aide de l'option NOCHECK ou activées à l'aide de l'option CHECK.
Il est intéressant de pouvoir désactiver une contrainte sans la supprimer (ce qui évite d'avoir à la recréer) en utilisant l'ordre ALTER TABLE
Pour afficher les contraintes définies sur les colonnes d’une table, exécutez la procédure stockée Sp_HelpConstraint avec en paramètre le nom de la table.
Ajouter un commentaire
Veuillez vous connecter pour ajouter un commentaire.
Pas encore de commentaires.