データベース列内の外部キーの多重参照
データベース設計では、外部キー制約は参照整合性を維持し、データの正確性。通常、外部キー列は別のテーブルの主キー列を参照し、レコード間に 1 対多または多対多の関係を確立します。ただし、次のような疑問が生じます: 複数のテーブルの外部キーとして機能する単一の列を定義できますか?
列は複数の外部キーを参照できますか?
答えいいえです。データベースの原則によれば、単一の列が複数の外部キーを同時に参照することは許可されません。この制限は、すべての主要なリレーショナル データベース管理システム (RDBMS) によって強制されます。
説明
外部キーの主な目的は、レコード間に直接リンクを確立することです。異なるテーブル。各外部キー値は、参照されるテーブル内の行を一意に識別する必要があります。単一の列で複数の外部キーを参照しようとすると、この基本原則に違反します。
外部キーの複数参照の代替
レコード間の関係を確立する必要がある場合複数のテーブルがある場合は、次の代替アプローチを考慮する必要があります。
複合キーを使用した例
質問に示されている例を考えてみましょう。
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, PRIMARY KEY (`id`, `item_type`, `item_id`) ); CREATE TABLE `header` ( `id` INT(10) UNSIGNED NOT NULL UNIQUE AUTO_INCREMENT, `title` VARCHAR(255) ); CREATE TABLE `service` ( `id` INT(10) UNSIGNED NOT NULL UNIQUE AUTO_INCREMENT, `desc` VARCHAR(65535) NOT NULL ); CREATE TABLE `product` ( `id` INT(10) UNSIGNED NOT NULL UNIQUE AUTO_INCREMENT, `desc` VARCHAR(65535) NOT NULL );
このスキーマでは、pdf_created テーブルの item_id 列は、pdf_created テーブルの id 列の両方を参照できます。 product テーブルとサービス テーブルの id 列。これは、id 列と item_type 列の両方を使用して pdf_created テーブルに複合主キーを定義することで実現できます。
結論
単一の列を直接持つことはできません。リレーショナル データベース内の複数の外部キーを参照する場合、結合テーブルや複合キーなどの代替アプローチを使用して、レコード間に必要な関係を確立できます。
以上が単一のデータベース列が複数の外部キーを参照できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。