ポリモーフィック関連付けを使用した 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_id
と model
の両方を含む複合主キーを使用します:
<code class="language-sql">CREATE TABLE Comments ( id INT, foreign_id INT, model TEXT, PRIMARY KEY (id, model) );</code>
これにより、foreign_id
と model
の各組み合わせの一意性が保証されますが、クエリが複雑になります。 クエリの設計については慎重に検討する必要があります。
以上がMySQL でポリモーフィック アソシエーションを使用して参照整合性を強制するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。