外部キー制約と非主キー列
リレーショナル データベースは、外部キー制約を利用してテーブル間の参照整合性を維持します。 通常、外部キーは主キーを参照しますが、非主キー列の参照が必要な場合もあります。
シナリオイラスト
2 つのテーブル、table1
と table2
を調べてみましょう:
<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
の主キーではない table1
列を使用して、AnotherID
と table1
の間に外部キー関係が必要です。
非主キーへの外部キーの確立
それほど頻繁ではありませんが、主キー以外の列を参照する外部キーを作成することは可能です。 ただし、非主キー列には一意制約を適用する必要があります:
<code class="language-sql">ALTER TABLE table1 ADD CONSTRAINT UQ_AnotherID UNIQUE (AnotherID);</code>
この一意の制約により、AnotherID
内の table1
値の一意性が保証され、外部キー ターゲットとしての使用が可能になります。
推奨される代替手段
理想的には、参照整合性を強化するために、外部キーは主キーを参照する必要があります。 可能であれば、table1
の ID
列を table2
の外部キー ターゲットとして利用するようにデータベース スキーマを再設計します。これにより、主キー以外の列の一意制約を管理する必要がなくなります。
以上が非主キー列に対して外部キーを使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。