ホームページ > データベース > mysql チュートリアル > MySQL でポリモーフィックな関連付けのための条件付き外部キー制約を実装するにはどうすればよいですか?

MySQL でポリモーフィックな関連付けのための条件付き外部キー制約を実装するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-16 11:22:59
オリジナル
551 人が閲覧しました

How to Implement Conditional Foreign Key Constraints in MySQL for Polymorphic Associations?

MySQL の条件付き外部キー制約: 多態性関連の問題の解決

外部キー制約は、あるテーブルの値が別の関連テーブルの対応する値を参照することを保証することで、データの整合性を強制します。ただし、場合によっては、条件に基づいて別のテーブルを参照する外部キーがテーブルに必要になる場合があります。これは条件付き外部キー制約と呼ばれます。

この場合、課題は、アプリケーションのさまざまな部分のコメントを保存できる Comments テーブルを作成することです。たとえば、ブログ投稿やユーザー画像に対するコメントなどです。理想的には、Comments テーブル内の foreign_id に対する外部キー制約は、model が 'blogpost' に設定されている場合にのみ適用されるべきです。

解決策: ポリモーフィック関連付け

残念ながら、MySQL は条件付き外部キー制約を直接サポートしていません。代わりに、この解決策には ポリモーフィック アソシエーション と呼ばれるデザイン パターンを使用することが含まれます。このスキーマは、Commentable という名前の中間テーブルを導入します。

<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)
);</code>
ログイン後にコピー

各コンテンツ タイプ (例: BlogPostUserPicture) は Commentable のサブタイプとなり、外部キーを介してそれを参照します。

<code class="language-sql">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>
ログイン後にコピー

これらのサブタイプ テーブルにデータを追加する前に、Commentable テーブルに新しい行を挿入して一意の ID を生成する必要があります。この生成された ID は、サブタイプ テーブルの外部キーとして使用されます。

このデザイン パターンを使用すると、参照整合性制約を適用して、ブログ投稿のコメントがブログ投稿のみを参照し、ユーザー画像のコメントがユーザー画像のみを参照するようにすることができます。

以上がMySQL でポリモーフィックな関連付けのための条件付き外部キー制約を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート