ホームページ >データベース >mysql チュートリアル >MySQL は多態性関連付けに対して条件付き外部キー制約を強制できますか?
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>
実装の詳細:
このアプローチでは、さまざまなエンティティ タイプに対応し、単一の「コメント」テーブルにコメントを保存する柔軟性を維持しながら、参照整合性が確保されます。
以上がMySQL は多態性関連付けに対して条件付き外部キー制約を強制できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。