Maison >base de données >tutoriel mysql >MySQL peut-il appliquer des contraintes de clé étrangère conditionnelle pour les associations polymorphes ?

MySQL peut-il appliquer des contraintes de clé étrangère conditionnelle pour les associations polymorphes ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-16 11:46:58996parcourir

Can MySQL Enforce Conditional Foreign Key Constraints for Polymorphic Associations?

Contraintes des clés étrangères conditionnelles MySQL : défis et solutions

Dans la conception de bases de données, l'intégrité des données est cruciale. Les contraintes de clé étrangère sont utilisées pour maintenir les relations entre les tables, mais dans certains cas, il peut être nécessaire d'appliquer des contraintes conditionnellement basées sur des valeurs de colonnes spécifiques. Par exemple, concevez un tableau « Commentaires » pour stocker les commentaires de diverses entités telles que les articles de blog et les images des utilisateurs.

MySQL prend-il en charge les contraintes de clé étrangère conditionnelle ?

Non pris en charge. Les contraintes de clé étrangère de MySQL doivent explicitement référencer une seule table, garantissant que chaque ligne de la table de référence a une ligne correspondante dans la table référencée. Les contraintes conditionnelles violent les principes de conception de bases de données relationnelles.

Solution : Association Polymorphe et "Super Table"

Il est recommandé d'utiliser la technologie "association polymorphe" pour résoudre ce problème. Cette technique consiste à créer une « hypertable » qui stocke les attributs communs de toutes les entités possédant des références de clé étrangère. Dans cet exemple, créez une table « Entités commentables » :

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

Vos entités (telles que « Blog Post » et « User Image ») seront alors des sous-types de cette hypertable :

<code class="language-sql">CREATE TABLE BlogPosts (
  blogpost_id INT PRIMARY KEY, -- 注意,此 ID 不是自动生成的
  ...
  FOREIGN KEY (blogpost_id) REFERENCES Commentable(id)
);

CREATE TABLE UserPictures (
  userpicture_id INT PRIMARY KEY, -- 注意,此 ID 不是自动生成的
  ...
  FOREIGN KEY (userpicture_id) REFERENCES Commentable(id)
);</code>

Détails de mise en œuvre :

  • Insérez une nouvelle ligne dans la table "Commentable Entities" pour générer un "id" unique avant d'insérer la nouvelle entité dans la table des sous-types.
  • Utilisez l'"id" généré comme "clé étrangère" lors de l'insertion dans la table des sous-types.

Cette approche garantit l'intégrité référentielle tout en conservant la flexibilité nécessaire pour s'adapter à une variété de types d'entités et stocker les commentaires dans un seul tableau « Commentaires ».

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