ホームページ > データベース > mysql チュートリアル > 単一のデータベース列が複数の外部キーを参照できますか?

単一のデータベース列が複数の外部キーを参照できますか?

Linda Hamilton
リリース: 2024-12-25 10:17:19
オリジナル
998 人が閲覧しました

Can a Single Database Column Reference Multiple Foreign Keys?

データベース列内の外部キーの多重参照

データベース設計では、外部キー制約は参照整合性を維持し、データの正確性。通常、外部キー列は別のテーブルの主キー列を参照し、レコード間に 1 対多または多対多の関係を確立します。ただし、次のような疑問が生じます: 複数のテーブルの外部キーとして機能する単一の列を定義できますか?

列は複数の外部キーを参照できますか?

答えいいえです。データベースの原則によれば、単一の列が複数の外部キーを同時に参照することは許可されません。この制限は、すべての主要なリレーショナル データベース管理システム (RDBMS) によって強制されます。

説明

外部キーの主な目的は、レコード間に直接リンクを確立することです。異なるテーブル。各外部キー値は、参照されるテーブル内の行を一意に識別する必要があります。単一の列で複数の外部キーを参照しようとすると、この基本原則に違反します。

外部キーの複数参照の代替

レコード間の関係を確立する必要がある場合複数のテーブルがある場合は、次の代替アプローチを考慮する必要があります。

  1. 結合テーブル: 関連テーブルの主キーを含む別のテーブルを作成します。この結合テーブルは、複数のテーブル間でレコードを接続するための仲介として機能します。
  2. 複合キー: 複数の列で構成される主キーを定義します。これにより、複数の列を同時に参照する外部キー制約を作成できます。

複合キーを使用した例

質問に示されている例を考えてみましょう。

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 サイトの他の関連記事を参照してください。

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