Maison >base de données >tutoriel mysql >Comment créer une contrainte de clé étrangère faisant référence à une colonne de clé non primaire ?
Faire référence aux clés non primaires dans les contraintes de clé étrangère
Le maintien de l'intégrité référentielle lors de la liaison de tables via des clés étrangères est une exigence courante. Cependant, cette situation se produit lorsque la table référencée par la clé étrangère ne possède pas de clé primaire correspondant à la colonne référencée.
Description du problème :
Considérez le schéma de base de données suivant :
<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 but ici est d'appliquer une contrainte de clé étrangère entre table2.AnotherID et table1.AnotherID. Cependant, ID est la clé primaire de table1 et AnotherID ne l'est pas.
Solution :
Pour créer une contrainte de clé étrangère qui fait référence à une clé non primaire, la colonne référencée doit avoir une contrainte unique qui lui est appliquée. Selon les livres en ligne de Microsoft :
Ainsi, dans le schéma donné, appliquer une contrainte unique à AnotherID dans la table1 permettra la création d'une contrainte de clé étrangère."Une contrainte FOREIGN KEY ne doit pas nécessairement être liée uniquement à une contrainte PRIMARY KEY dans une autre table ; elle peut également être définie comme une colonne qui référence une contrainte UNIQUE dans une autre table."
<code class="language-sql">ALTER TABLE table1 ADD CONSTRAINT UQ_AnotherID UNIQUE (AnotherID);</code>Cependant, il est important de noter que s'il existe une clé primaire alternative candidate, son utilisation est souvent l'approche la plus appropriée.
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!