Maison > base de données > tutoriel mysql > Quand devez-vous utiliser une clé étrangère pour une colonne de clé non primaire ?

Quand devez-vous utiliser une clé étrangère pour une colonne de clé non primaire ?

Patricia Arquette
Libérer: 2025-01-15 10:56:44
original
201 Les gens l'ont consulté

When Should You Use a Foreign Key to a Non-Primary Key Column?

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal