ホームページ > データベース > mysql チュートリアル > 非主キー列を参照する外部キー制約を作成するにはどうすればよいですか?

非主キー列を参照する外部キー制約を作成するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-15 09:32:46
オリジナル
537 人が閲覧しました

How to Create a Foreign Key Constraint Referencing a Non-Primary Key Column?

外部キー制約での非主キーの参照

外部キーを介してテーブルをリンクするときに参照整合性を維持することは一般的な要件です。ただし、この状況は、外部キーによって参照されるテーブルに、参照される列に対応する主キーがない場合に発生します。

問題の説明:

次のデータベース スキーマを考えてみましょう:

<code class="language-sql">CREATE TABLE table1
(
   ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
   AnotherID INT NOT NULL,
   SomeData VARCHAR(100) NOT NULL
);

CREATE TABLE table2
(
   ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
   AnotherID INT NOT NULL,
   MoreData VARCHAR(30) NOT NULL,

   CONSTRAINT fk_table2_table1 FOREIGN KEY (AnotherID) REFERENCES table1 (AnotherID)
);</code>
ログイン後にコピー

ここでの目標は、table2.AnotherID と table1.AnotherID の間に外部キー制約を強制することです。ただし、ID は table1 の主キーですが、AnotherID はそうではありません。

解決策:

非主キーを参照する外部キー制約を作成するには、参照される列に 一意制約 が適用されている必要があります。 Microsoft の Books Online によると:

"FOREIGN KEY 制約は、別のテーブルの PRIMARY KEY 制約にのみリンクする必要はありません。別のテーブルの UNIQUE 制約を参照する列として定義することもできます。"

したがって、指定されたスキーマで、table1 の AnotherID に一意制約を適用すると、外部キー制約を作成できるようになります。

<code class="language-sql">ALTER TABLE table1 ADD CONSTRAINT UQ_AnotherID UNIQUE (AnotherID);</code>
ログイン後にコピー

ただし、代替の主キー候補が存在する場合、多くの場合、これを使用する方がより適切なアプローチであることに注意することが重要です。

以上が非主キー列を参照する外部キー制約を作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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