ホームページ > データベース > mysql チュートリアル > SQL では 1 つの列を複数の外部キーとして機能できますか?

SQL では 1 つの列を複数の外部キーとして機能できますか?

Patricia Arquette
リリース: 2024-12-24 09:21:26
オリジナル
193 人が閲覧しました

Can a Single Column Serve as Multiple Foreign Keys in SQL?

1 つの列を複数の外部キーとして参照する

データベース設計では、単一の列を外部キーとして使用して、異なるテーブル間の関係を確立したい場合があります。複数のターゲットテーブル。ただし、以下の SQL コード スニペットに示されているように、この特定のシナリオは実行可能ではありません:

CREATE TABLE `pdf_created` (
    `id` INT(10) UNSIGNED NOT NULL UNIQUE AUTO_INCREMENT,
    `pdf_id` INT(10) NOT NULL,
    `item_type` INT(3) UNSIGNED NOT NULL,
    `item_id` INT(10) UNSIGNED NOT NULL,
    `quantity` INT(3) NOT NULL,
    PRIMARY KEY (`id`),
    KEY `FK_pdf_id` (`pdf_id`),
    CONSTRAINT `FK_pdf_id` FOREIGN KEY (`pdf_id`) REFERENCES `pdf` (`id`),
    KEY `FK_item_type` (`item_type`),
    CONSTRAINT `FK_item_type` FOREIGN KEY (`item_type`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
    KEY `FK_item_id` (`item_id`),
    CONSTRAINT `FK_item_id` FOREIGN KEY (`item_id`) REFERENCES `product` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT `FK_item_id` FOREIGN KEY (`item_id`) REFERENCES `service` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT `FK_item_id` FOREIGN KEY (`item_id`) REFERENCES `header` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
);
ログイン後にコピー

この理由は、単一の列が複数のテーブルの主キーと一致することを必要とする外部キー制約を強制するためです。リレーショナルデータベース理論では不可能です。 pdf_created テーブルに、product、service、header、item テーブル内の対応する列を参照する列を作成できますが、これらの参照のそれぞれに対して外部キー制約を同時に確立することは許可されていません。

ただし、可能です。明示的な外部キー制約を定義せずに、参照された列の値を結合に利用します。外部キーは基本的に、関連付けられたテーブルの主キーの値を含む列です。これにより、共有外部キー値に基づいてテーブル間のレコードを結合できるようになります。特定のシナリオでは、pdf_created テーブルの item_id 列で、product、service、header、および item テーブルの主キーを参照することができます。これにより、item_id 列を結合条件として使用して、pdf_created テーブルをこれらのターゲット テーブルのいずれかと結合できます。

以上がSQL では 1 つの列を複数の外部キーとして機能できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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