Maison >base de données >tutoriel mysql >Comment puis-je créer une contrainte de clé étrangère faisant référence à une colonne de clé non primaire ?

Comment puis-je créer une contrainte de clé étrangère faisant référence à une colonne de clé non primaire ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-15 09:27:42412parcourir

How Can I Create a Foreign Key Constraint Referencing a Non-Primary Key Column?

Utiliser des clés étrangères pour maintenir l'intégrité référentielle des colonnes de clé non primaire

Dans les systèmes de bases de données, les clés étrangères sont utilisées pour établir des relations entre les tables et garantir l'intégrité référentielle. En règle générale, les clés étrangères font référence aux clés primaires d'autres tables pour garantir la cohérence des données dans les tables dépendantes. Cependant, dans certains cas, il peut être nécessaire de créer des clés étrangères pointant vers des colonnes de clés non primaires.

Considérons le scénario décrit dans la question, dans lequel une table (table2) doit maintenir l'intégrité référentielle avec une autre table (table1), mais la colonne référencée dans la table1 n'est pas une clé primaire. L'exemple de code SQL fourni montre les définitions de table et de clé étrangère que vous essayez de créer :

<code class="language-sql">CREATE TABLE table1
(
   ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
   AnotherID INT NOT NULL,
   SomeData VARCHAR(100) NOT NULL
)

CREATE TABLE table2
(
   ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
   AnotherID INT NOT NULL,
   MoreData VARCHAR(30) NOT NULL,

   CONSTRAINT fk_table2_table1 FOREIGN KEY (AnotherID) REFERENCES table1 (AnotherID)
)</code>

Le problème est que la colonne AnotherID de la table1 n'est pas une clé primaire. Dans la plupart des systèmes de bases de données, les clés étrangères ne peuvent référencer que des clés primaires ou des colonnes avec des contraintes uniques.

Pour résoudre ce problème, vous devez vous assurer que la colonne référencée (AnotherID dans la table1) a une contrainte unique définie. Des contraintes uniques sont appliquées ligne par ligne, garantissant que la valeur de la colonne est unique sur toutes les lignes du tableau.

En ajoutant une contrainte unique sur AnotherID dans la table1, il devient candidat pour une référence de clé étrangère. Le code SQL modifié suivant illustre cette correction :

<code class="language-sql">ALTER TABLE table1
ADD UNIQUE (AnotherID)</code>

Vous pouvez désormais définir avec succès une contrainte de clé étrangère dans la table2, renforçant ainsi l'intégrité référentielle entre les deux tables.

<code class="language-sql">ALTER TABLE table2
ADD CONSTRAINT FK_Table2_Table1 FOREIGN KEY (AnotherID) REFERENCES table1 (AnotherID)</code>

Cependant, comme le souligne la réponse à la question d'origine, il est généralement recommandé d'utiliser la clé primaire comme clé candidate. Les clés primaires sont automatiquement définies comme uniques, ne nécessitant aucune contrainte supplémentaire et simplifiant les définitions de clés étrangères.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn