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