1. ホーム
  2. sql

[解決済み] 外部キーから非主要キーへ

2022-04-23 11:38:13

質問

データを保持するテーブルがあり、それらの行の1つは別のテーブルに存在する必要があります。そこで、参照整合性を維持するために外部キーが必要です。

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)
)

しかし、ご覧の通り、外部キーとしたテーブルでは、カラムがPKではありません。この外部キーを作成する方法、あるいはこの参照整合性を維持するためのより良い方法はありますか?

解決方法は?

プライマリーキーでないカラムに外部キーを作成する場合は、一意制約を持つカラムでなければなりません(MUST)。

から 書籍オンライン :

FOREIGN KEY 制約は、PRIMARY KEY 制約にのみリンクさせる必要はありません。 他のテーブルの KEY 制約を参照するように定義することもできます。 他のテーブルのUNIQUE制約のカラム。

ですから、あなたの場合、もしあなたが AnotherID 一意であれば許可されます。一意制約をかけられないとなると、運が悪いとしか言いようがありませんが、これは本当によく考えればわかることです。

しかし、前述のように、候補キーとして完全に良い主キーがある場合は、それを使用するのはどうでしょうか?