复合主键中的外键

时间:2012-01-04 20:28:13

标签: sql sql-server foreign-keys primary-key constraints

我有以下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'

I.e。:我想确保插入tblC的元组对存在于tblB中。但我无法做到这一点,因为pkID2不是关键。实际上tblB可以将tblAID, pkID2作为复合主键。但是,tblAID仍然必须是tblA.ID的FK。

1 个答案:

答案 0 :(得分:5)

  

实际上tblB可以将tblAID,pkID2作为复合主键。

或者从这两个字段创建一个新的唯一键。外键不需要引用主键。

  

但是tblAID仍然必须是tblA.ID的FK。

这仍然有效。主键或唯一键中的列也可以参与其他约束,包括外键约束。