Maison > base de données > tutoriel mysql > Comment puis-je renforcer l'intégrité référentielle avec des associations polymorphes dans MySQL ?

Comment puis-je renforcer l'intégrité référentielle avec des associations polymorphes dans MySQL ?

Barbara Streisand
Libérer: 2025-01-16 11:42:58
original
414 Les gens l'ont consulté

How Can I Enforce Referential Integrity with Polymorphic Associations in MySQL?

Maintenir l'intégrité référentielle dans MySQL avec des associations polymorphes

Les contraintes de clé étrangère MySQL sont cruciales pour l'intégrité des bases de données relationnelles. Cependant, la gestion de l'intégrité référentielle avec des associations polymorphes (où une seule clé étrangère fait référence à plusieurs tables) présente des défis uniques.

Relations polymorphes et intégrité des données

Considérez un tableau Comments contenant des commentaires associés à différentes parties de l'application (par exemple, des articles de blog, des images), identifiés par la colonne model. Appliquer directement une contrainte de clé étrangère comme celle-ci :

<code class="language-sql">FOREIGN KEY (`foreign_id`) REFERENCES blogposts(`id`)</code>
Copier après la connexion

est insuffisant, car il ne valide que contre blogposts, en ignorant la valeur de la colonne model. MySQL ne prend pas en charge nativement les contraintes de clé étrangère conditionnelle basées sur les valeurs de colonne.

Stratégies de gestion des associations polymorphes

Pour maintenir l'intégrité des données dans les relations polymorphes, envisagez ces alternatives :

1. L'approche Supertable :

Créez une Commentable supertable dont héritent tous les types de contenu. Chaque table de type de contenu référence ensuite Commentable via une clé étrangère :

<code class="language-sql">CREATE TABLE Commentable ( id SERIAL PRIMARY KEY );

CREATE TABLE Comments ( comment_id SERIAL PRIMARY KEY, foreign_id INT NOT NULL, FOREIGN KEY (foreign_id) REFERENCES Commentable(id) );

CREATE TABLE BlogPosts ( blogpost_id INT PRIMARY KEY, FOREIGN KEY (blogpost_id) REFERENCES Commentable(id) );

CREATE TABLE UserPictures ( userpicture_id INT PRIMARY KEY, FOREIGN KEY (userpicture_id) REFERENCES Commentable(id) );</code>
Copier après la connexion

2. Stratégie de clé primaire composite :

Utiliser une clé primaire composite englobant à la fois foreign_id et model :

<code class="language-sql">CREATE TABLE Comments ( id INT, foreign_id INT, model TEXT, PRIMARY KEY (id, model) );</code>
Copier après la connexion

Cela garantit l'unicité de chaque combinaison foreign_id et model, mais ajoute de la complexité à l'interrogation. Un examen attentif de la conception des requêtes est nécessaire.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal