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
Libérer: 2025-01-16 11:46:58
original
1051 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

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