2012-01-04 53 views
1

で外部キー:私は、次の3つのテーブル持っている複合主キー

TBLA

ID - PK 
name 

TBLB

ID - PK 
tblAID - FK references tblA.ID 
pkID2 

tblC

ID - PK 
tblAID * 
fkID2 * 
... 

私は私がこれを行う場合は、このタプル(tblB.tblAID, tblB.pkID2)

のFKを作りたい:

が全く主または候補キーではありません:私は、エラーメッセージが表示されます

alter table tblC with check 
add constraint FK_tblC_tblB 
foreign key (tblAID, fkID2) 
references tblB (tblAID, pkID2) 

を外部キーの参照列リストと一致する参照テーブル 'tblB' 'FK_tblC_tblB'

私は:に挿入されたタプルペアがtblBに存在することを確認します。しかし、pkID2は鍵ではないので、私はそれをすることはできません。本当にtblBは複合プライマリキーとしてtblAID, pkID2を持つことができます。しかし、tblAIDは、まだtblA.IDのFKでなければなりません。

+0

これは半修辞的ですが、なぜtblCに入れている列をtblBに入れることはできませんか? – Dave

+0

私はあなたが予約しようとしていることについてはっきりしていません。 tblBに同様のtblAIDとpkID2値が含まれていない限り、この制約の目的はtblCに行を追加しないようにすることで、tblCにtblAIDやpkID2の値が含まれている場合、 –

答えて

5

本当にtblBは複合主キーとしてtblAID、pkID2を持つことができます。

または、これらの2つのフィールドから新しいユニークキーを作成します。外部キーは、主キーを参照する必要はありません。

しかし、tblAIDはまだtblA.IDのFKでなければなりません。

それでも機能します。プライマリキーまたはユニークキーの列は、外部キー制約を含む他の制約にも参加できます。

+0

それでは、 'tblAID、pkID2'に新しいUNIQUE KEYを追加することをお勧めしますか? – Marcus

+0

はい、それは私が提案しているものです。 – hvd

+0

@IgorK:そうです。 http://msdn.microsoft.com/en-us/library/ms191166.aspx、http://msdn.microsoft.com/en-us/library/ms188066.aspxを参照してください。 – ruakh

関連する問題