ホームページ > データベース > mysql チュートリアル > MySQL でポリモーフィック アソシエーションを使用して参照整合性を強制するにはどうすればよいですか?

MySQL でポリモーフィック アソシエーションを使用して参照整合性を強制するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-16 11:42:58
オリジナル
367 人が閲覧しました

How Can I Enforce Referential Integrity with Polymorphic Associations in MySQL?

ポリモーフィック関連付けを使用した MySQL での参照整合性の維持

MySQL の外部キー制約は、リレーショナル データベースの整合性にとって重要です。 ただし、単一の外部キーが複数のテーブルを参照する多態性関連付けによる参照整合性の管理には、特有の課題が伴います。

ポリモーフィックな関係とデータの整合性

Comments 列で識別される、さまざまなアプリケーション パーツ (ブログ投稿、画像など) に関連付けられたコメントを含む model テーブルを考えてみましょう。 次のような外部キー制約を直接強制します:

<code class="language-sql">FOREIGN KEY (`foreign_id`) REFERENCES blogposts(`id`)</code>
ログイン後にコピー

blogposts に対してのみ検証し、model 列の値を無視するため不十分です。 MySQL には、カラム値に基づく条件付き外部キー制約のネイティブ サポートがありません。

ポリモーフィックな関連付けを処理するための戦略

ポリモーフィックな関係でデータの整合性を維持するには、次の代替案を検討してください。

1.スーパーテーブルのアプローチ:

すべてのコンテンツ タイプが継承する Commentable スーパーテーブルを作成します。 各コンテンツ タイプ テーブルは、外部キーを介して 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) );

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

2.複合主キー戦略:

foreign_idmodel の両方を含む複合主キーを使用します:

<code class="language-sql">CREATE TABLE Comments ( id INT, foreign_id INT, model TEXT, PRIMARY KEY (id, model) );</code>
ログイン後にコピー

これにより、foreign_idmodel の各組み合わせの一意性が保証されますが、クエリが複雑になります。 クエリの設計については慎重に検討する必要があります。

以上がMySQL でポリモーフィック アソシエーションを使用して参照整合性を強制するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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