Associations polymorphes : établissement d'une clé étrangère vers plusieurs tables
Dans la conception de bases de données, il est souvent souhaitable de créer des relations entre les tables. Cependant, certains scénarios peuvent survenir dans lesquels vous devez établir une contrainte de clé étrangère entre une seule colonne et plusieurs tables cible. Ce concept est connu sous le nom d'associations polymorphes.
Dans ce cas précis, vous souhaitez créer une table appelée "popular_areas" avec deux colonnes : "region_id" et "popular_place_id". La colonne popular_place_id doit agir comme une clé étrangère, faisant référence aux tables « pays » ou « states ».
Contraintes de base de données et associations polymorphes
Malheureusement, les contraintes SQL standard ne prennent pas en charge les associations polymorphes. Une contrainte de clé étrangère nécessite une référence directe à une seule table cible. Des frameworks comme Rails et Hibernate peuvent proposer des solutions de contournement, mais ils nécessitent la désactivation des contraintes SQL. Cela introduit des incohérences et des problèmes d'intégrité des données.
Solutions alternatives
Pour remédier à cette limitation, il existe plusieurs approches alternatives :
Héritage multiple :
Créez des tableaux séparés, tels que "popular_states" et "popular_countries", qui font respectivement référence aux "états" et aux "pays". Cela préserve l'intégrité référentielle.
Supertable commune :
Créez une supertable appelée « lieux » dont héritent à la fois les « États » et les « pays ». La clé étrangère dans "popular_areas" ferait alors référence à "places".
Approche à double colonne :
Utilisez deux colonnes dans "popular_areas" : "state_id" et " country_id." Une seule de ces colonnes doit être renseignée, garantissant des références cohérentes.
Conclusion
Les associations polymorphes présentent des défis dans la conception de bases de données. Cependant, en comprenant les limites et en explorant des solutions alternatives, il est possible d'établir des relations entre les tables de manière flexible et efficace.
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!