> Tech > Application de l’intégrité référentielle

Application de l’intégrité référentielle

Tech - Par iTPro - Publié le 24 juin 2010
email

Les versions de SQL Server antérieures à  la 6.0 ne permettent pas de déclarer des relations de clé primaire et étrangère dans les définitions de table. Toute validation d'intégrité référentielle doit être effectuée par le biais de déclencheurs qu'il faut coder en T-SQL. SQL Server 6.0 a amené les contraintes,

Application de l’intégrité référentielle

y compris les contraintes de clé primaire et étrangère, mais limite les actions référentielles à  NO ACTION. SQL Server 7.0 et 6.5 offrent aussi l’option NO ACTION uniquement (sans la syntaxe NO ACTION).
SQL Server 2000 a pris en charge les actions référentielles CASCADE et NO ACTION dès la version bêta 1. Le listing 1 présente la syntaxe de création de deux tables simples : Table1 et Table2. Table2 dispose d’une clé étrangère qui fait référence à  Table1 ; l’action référentielle est l’option CASCADE pour les mises à  jour et NO ACTION pour les opérations de suppression. NO ACTION est l’action par défaut. Par conséquent, la spécifier explicitement dans la définition de la contrainte est facultatif. Le listing tente ensuite des insertions dans les deux tables, y compris une insertion dans Table2 transgressant la relation de clé étrangère. SQL Server refuse la transgression et renvoie le message d’erreur suivant :

Server: Msg 547, Level 16, State 1, Line 1
INSERT statement conflicted with COLUMN FOREIGN KEY
constraint ‘FK_Table2_Table1_a’. The conflict occurred in
database ‘pubs’, table ‘Table1’, column ‘a’.
The statement has been terminated.

Le code essaie ensuite de supprimer un enregistrement référencé de la Table1, échoue et renvoie le message d’erreur suivant :

Server: Msg 547, Level 16, State 1, Line 1
DELETE statement conflicted with COLUMN REFERENCE constraint
‘FK_Table2_Table1_a’. The conflict occurred in database ‘pubs’,
table ‘Table2’, column ‘a’.
The statement has been terminated.

Le code supprime ensuite un enregistrement de Table1 non référencée par Table2. Enfin, le code met à  jour toutes les valeurs de la clé primaire de Table1, répercutant en cascade les modifications sur Table2.
On peut également définir des clés étrangères par le biais de SQL Server Enterprise Manager. Dans le panneau de gauche, ouvrez la base de données, puis sélectionnez Tables. Lorsque le panneau de droite affiche toutes les tables, cliquez avec le bouton droit de la souris sur la table de référence puis sélectionnez Design Table. Sur la barre d’outils, cliquez sur le bouton Table and Index Properties, puis cliquez sur l’onglet Relationships. La figure 1 illustre la définition d’une clé étrangère de Table2 dans Table1. La boîte de dialogue permet de nommer la contrainte et de choisir la table (référencée) contenant la clé primaire et la table (de référence) contenant la clé étrangère. Des listes déroulantes permettent de choisir la colonne de chaque table constituant la clé. Au bas de la boîte de dialogue, on peut choisir de maintenir la relation entre les tables en appliquant une opération CASCADE pour les mises à  jour de la clé primaire, les suppressions de la clé primaire ou les deux. Lorsqu’une case n’est pas cochée, cela signifie que le comportement par défaut NO ACTION (empêchant la modification) est activé.

Téléchargez gratuitement cette ressource

Guide PME : 5 leviers pour accélérer votre développement

Guide PME : 5 leviers pour accélérer votre développement

Grandir, se développer et piloter la croissance sont des enjeux majeurs pour les PME qui doivent sécuriser le quotidien pour s’engager vers demain. Découvrez, dans ce Guide infographique, les différents leviers qui vous permettront de consolider durablement votre développement.

Tech - Par iTPro - Publié le 24 juin 2010

A lire aussi sur le site

Revue Smart DSI

La Revue du Décideur IT