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

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

DDD
DDDオリジナル
2025-01-16 11:41:17233ブラウズ

How Can I Implement Polymorphic Associations in MySQL to Handle Conditional Foreign Keys?

MySQL の条件付き外部キー

データベース設計では、データの一貫性を確保するために外部キー制約を強制することが必要になることがよくあります。ただし、ポリモーフィズムを伴うシナリオでは、外部キーが複数の関連テーブルの行を参照する可能性があり、従来の外部キー制約では不十分です。

ここで示した例では、comments テーブルには、モデル フィールドに基づいてさまざまなテーブル (ブログ投稿、画像など) を参照できる foreign_id フィールドが含まれています。これを行うには、条件付き外部キー制約が必要です。

MySQL 自体は、条件付き外部キー制約をサポートしていません。条件に基づいて別のテーブルを参照する外部キーを宣言すると、リレーショナル データベースの設計原則に違反します。

「多態性関連付け」と呼ばれる、より効率的なアプローチには、関連するすべてのテーブルの単一の参照ポイントとして機能する「スーパーテーブル」を作成することが含まれます。この場合、次の構造を実装できます:

<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>

各コンテンツ タイプ (ブログ投稿、ユーザー画像など) は、コメント可能なスーパーテーブルのサブタイプになります。

<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>

特定のコンテンツ テーブルにデータを挿入するには、まずコメント可能テーブルに新しい行を挿入して、疑似主キー ID を取得する必要があります。この ID は特定のコンテンツ テーブルに使用できます。

このアプローチにより、多態性の関連付けに必要な柔軟性を維持しながら、参照整合性が可能になります。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。