Création et modification des contraintes FOREIGN KEY
Vous pouvez créer une contrainte FOREIGN KEY dans le cadre de la définition d'une table lorsque vous créez celle-ci. Si une table existe déjà, vous pouvez ajouter une contrainte FOREIGN KEY, sous réserve que celle-ci soit liée à une contrainte PRIMARY KEY ou UNIQUE existante dans la même table ou dans une autre. Une table peut contenir plusieurs contraintes FOREIGN KEY.
Si une contrainte FOREIGN KEY existe déjà, vous pouvez la modifier ou la supprimer, par exemple si vous souhaitez que la contrainte FOREIGN KEY de la table référence d'autres colonnes. Toutefois, vous ne pouvez pas modifier la longueur d'une colonne définie avec une contrainte FOREIGN KEY.
[!REMARQUE]
Pour modifier une contrainte FOREIGN KEY, vous devez d'abord supprimer la contrainte FOREIGN KEY existante, puis la recréer avec sa nouvelle définition.
Supprimez une contrainte FOREIGN KEY pour lever l'obligation d'intégrité référentielle entre les colonnes de clé étrangère et les colonnes de clé primaire, ou contrainte UNIQUE, associées dans une autre table.
Pour créer une contrainte FOREIGN KEY lors de la création d'une table
Pour créer une contrainte FOREIGN KEY sur une table existante
Procédure : créer des relations entre tables (Visual Database Tools)
Pour supprimer une contrainte FOREIGN KEY
Application d'une contrainte FOREIGN KEY à l'aide de WITH NOCHECK
Lorsque vous ajoutez une contrainte FOREIGN KEY à une colonne ou à des colonnes existantes dans une table, par défaut, le Moteur de base de données examine les données existant dans les colonnes afin de s'assurer que toutes les valeurs, à l'exception de NULL, existent dans les colonnes de la contrainte PRIMARY KEY ou UNIQUE référencée. Il est toutefois possible, en spécifiant WITH NOCHECK, d'empêcher le Moteur de base de données de vérifier les données de la colonne en fonction de la nouvelle contrainte et de lui demander d'ajouter la nouvelle contrainte, sans tenir compte des données de la colonne. L'option WITH NOCHECK est utile si les données existantes satisfont déjà à la nouvelle contrainte FOREIGN KEY ou si une règle d'entreprise exige l'application de la contrainte à partir du moment présent seulement.
Faites néanmoins preuve de prudence lorsque vous ajoutez une contrainte sans vérifier les données existantes car, lors d'une telle opération, les contrôles du Moteur de base de données qui assurent l'intégrité des données de la table ne sont pas mis en œuvre.
Pour empêcher la vérification des données existantes lorsque vous créez une contrainte FOREIGN KEY
Désactivation des contraintes FOREIGN KEY
Vous pouvez désactiver les contraintes FOREIGN KEY existantes pour des opérations spécifiques, telles que les opérations INSERT, UPDATE et le traitement de la réplication.
Instructions INSERT et UPDATE
La désactivation d'une contrainte FOREIGN KEY permet de modifier les données de la table sans qu'elles soient validées par les contraintes. Désactivez une contrainte FOREIGN KEY lors de l'exécution d'instructions INSERT et UPDATE si des nouvelles données violent la contrainte ou que cette dernière ne doit s'appliquer qu'aux seules données figurant déjà dans la base de données.
[!REMARQUE]
Aucune action en cascade définie sur une clé primaire associée n'est réalisée sur les lignes qui contiennent des clés étrangères désactivées.
Traitement de la réplication
Désactivez une contrainte FOREIGN KEY pendant la réplication si la contrainte est spécifique à la base de données source. Lors d'une réplication de table, la définition et les données de cette table sont copiées de la base de données source vers une base de données de destination. Si les contraintes FOREIGN KEY sont spécifiques à la base de données source mais ne sont pas désactivées durant la réplication, elles risquent d'empêcher inutilement l'entrée de nouvelles données dans la base de données de destination. Pour plus d'informations, consultez Contrôle des contraintes, des identités et des déclencheurs avec l'option NOT FOR REPLICATION.
Pour désactiver une contrainte FOREIGN KEY pour des instructions INSERT et UPDATE
Pour désactiver une contrainte FOREIGN KEY au moment de la réplication
Procédure : désactiver des contraintes de clé étrangère pour la réplication (Visual Database Tools)
Pour obtenir des informations sur les contraintes FOREIGN KEY
sys.foreign_keys (Transact-SQL)
Pour obtenir des informations sur les colonnes qui composent une contrainte FOREIGN KEY