ホームページ >データベース >mysql チュートリアル >MySQL は多態性関連付けに対して条件付き外部キー制約を強制できますか?

MySQL は多態性関連付けに対して条件付き外部キー制約を強制できますか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-16 11:46:58996ブラウズ

Can MySQL Enforce Conditional Foreign Key Constraints for Polymorphic Associations?

MySQL の条件付き外部キー制約: 課題と解決策

データベース設計では、データの整合性が非常に重要です。外部キー制約はテーブル間の関係を維持するために使用されますが、場合によっては、特定の列の値に基づいて条件付きで制約を適用する必要がある場合があります。たとえば、ブログ投稿やユーザーの写真などのさまざまなエンティティに対するコメントを保存する「コメント」テーブルを設計します。

MySQL は条件付き外部キー制約をサポートしていますか?

サポートされていません。 MySQL の外部キー制約は単一のテーブルを明示的に参照し、参照テーブルのすべての行が参照先テーブルに一致する行を持つようにする必要があります。条件付き制約は、リレーショナル データベース設計の原則に違反します。

解決策: ポリモーフィック関連付けと「スーパー テーブル」

この問題を解決するには、「多態性関連付け」テクノロジーを使用することをお勧めします。この手法には、外部キー参照を持つすべてのエンティティの共通属性を格納する「ハイパーテーブル」の作成が含まれます。この例では、「コメント可能なエンティティ」テーブルを作成します:

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

エンティティ (「ブログ投稿」や「ユーザー画像」など) は、このハイパーテーブルのサブタイプになります:

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

実装の詳細:

  • 新しいエンティティをサブタイプ テーブルに挿入する前に、「コメント可能なエンティティ」テーブルに新しい行を挿入して一意の「ID」を生成します。
  • サブタイプ テーブルに挿入するときに、生成された「id」を「外部キー」として使用します。

このアプローチでは、さまざまなエンティティ タイプに対応し、単一の「コメント」テーブルにコメントを保存する柔軟性を維持しながら、参照整合性が確保されます。

以上がMySQL は多態性関連付けに対して条件付き外部キー制約を強制できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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