Contraintes de clés étrangères et colonnes de clés non primaires
Les bases de données relationnelles utilisent des contraintes de clé étrangère pour maintenir l'intégrité référentielle entre les tables. Bien que les clés étrangères fassent généralement référence à des clés primaires, il existe des cas où le référencement à une colonne de clé non primaire est nécessaire.
Illustration du scénario
Examinons deux tableaux, table1
et table2
:
<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>
Ici, une relation de clé étrangère est souhaitée entre table2
et table1
en utilisant la colonne AnotherID
, qui n'est pas une clé primaire dans table1
.
Établissement d'une clé étrangère vers une clé non primaire
Bien que moins fréquent, la création d'une clé étrangère référençant une colonne de clé non primaire est réalisable. Cependant, une contrainte unique doit être appliquée sur la colonne de clé non primaire :
<code class="language-sql">ALTER TABLE table1 ADD CONSTRAINT UQ_AnotherID UNIQUE (AnotherID);</code>
Cette contrainte unique garantit l'unicité des valeurs AnotherID
au sein de table1
, permettant son utilisation comme cible de clé étrangère.
Alternative recommandée
Idéalement, les clés étrangères devraient faire référence aux clés primaires pour une intégrité référentielle plus forte. Si possible, reconcevez le schéma de votre base de données pour utiliser la colonne table1
de ID
comme cible de clé étrangère dans table2
. Cela élimine le besoin de gérer des contraintes uniques sur les colonnes de clé non primaire.
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!