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 :
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!