Maison >base de données >tutoriel mysql >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 ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-24 01:51:291048parcourir

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 de la nécessité 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. Table d'union : Créez une table d'union unique qui intègre 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 union détermine dans quelle table parent réelle insérer ou mettre à jour.
  2. Colonne de type : Introduire 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, ce qui suit L'instruction crée une table d'union :

<code class="sql">CREATE TABLE union_table AS
SELECT * FROM subordinates
UNION ALL
SELECT * FROM products;</code>

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

<code class="sql">ALTER TABLE images
ADD FOREIGN KEY (person_id) REFERENCES union_table(id);</code>

Dans PostgreSQL, une approche similaire est utilisée :

<code class="sql">CREATE TABLE union_table AS
SELECT * FROM subordinates
UNION ALL
SELECT * FROM products;</code>

La contrainte de clé étrangère devient :

<code class="sql">ALTER TABLE images
ADD FOREIGN KEY (person_id) REFERENCES union_table(id);</code>

Conclusion

Bien qu'une clé étrangère directe vers plusieurs tables ne soit pas réalisable, des stratégies alternatives permettent un polymorphisme relation de clé étrangère 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 parent.

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