"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Une clé étrangère peut-elle référencer plusieurs tables dans SQL ?

Une clé étrangère peut-elle référencer plusieurs tables dans SQL ?

Publié le 2024-11-20
Parcourir:205

Can a Foreign Key Reference Multiple Tables in SQL?

Contraintes de clé étrangère polymorphes : une approche polyvalente

La contrainte de clé étrangère conventionnelle établit un lien direct entre deux tables spécifiées. Cependant, que se passe-t-il si vous avez besoin d'une relation polymorphe dans laquelle une colonne fait référence à l'une des nombreuses tables parents possibles ?

Une clé étrangère vers plusieurs tables est-elle possible ?

Malheureusement, la réponse est négative. Une contrainte de clé étrangère ne peut référencer qu’une seule table parent. Cette limitation découle du besoin d'intégrité et de cohérence des données dans les systèmes de bases de données.

Considérations pratiques

Malgré la limitation inhérente, il existe des approches pratiques qui imitent le comportement d'un clé étrangère vers plusieurs tables :

  1. Union Table : Créez une seule table d'union qui incorpore les colonnes de toutes les tables parents possibles. La colonne de clé étrangère dans la table enfant fait référence à la table union. Lors de l'insertion ou de la mise à jour de données, la table d'union détermine dans quelle table parent réelle insérer ou mettre à jour.
  2. Colonne de type : Introduisez une colonne de type dans la table enfant pour différencier les types de table parent possibles. . La colonne de clé étrangère fait ensuite référence à la table parent correspondant au type spécifié dans la colonne type.

Exemples dans MySQL et PostgreSQL

Dans MySQL, les éléments suivants L'instruction crée une table union :

CREATE TABLE union_table AS
SELECT * FROM subordinates
UNION ALL
SELECT * FROM products;

La contrainte de clé étrangère dans la table enfant serait alors :

ALTER TABLE images
ADD FOREIGN KEY (person_id) REFERENCES union_table(id);

Dans PostgreSQL, une approche similaire est utilisée :

CREATE TABLE union_table AS
SELECT * FROM subordinates
UNION ALL
SELECT * FROM products;

La contrainte de clé étrangère devient :

ALTER TABLE images
ADD FOREIGN KEY (person_id) REFERENCES union_table(id);

Conclusion

Bien qu'une clé étrangère directe vers plusieurs tables ne soit pas réalisable, des stratégies alternatives permettent une clé étrangère polymorphe relation clé dans les systèmes de bases de données SQL. Ces stratégies préservent l'intégrité des données tout en offrant la flexibilité nécessaire pour accueillir plusieurs tables parents.

Déclaration de sortie Cet article est reproduit sur: 1729692611 S'il y a une contrefaçon, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3