ホームページ >データベース >mysql チュートリアル >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 サイトの他の関連記事を参照してください。