我有以下3个表格:
TBLA
ID - PK
name
TBLB
ID - PK
tblAID - FK references tblA.ID
pkID2
TBLC
ID - PK
tblAID *
fkID2 *
...
我想让这个元组成为(tblB.tblAID, tblB.pkID2)
如果我这样做:
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。
答案 0 :(得分:5)
实际上tblB可以将tblAID,pkID2作为复合主键。
或者从这两个字段创建一个新的唯一键。外键不需要引用主键。
但是tblAID仍然必须是tblA.ID的FK。
这仍然有效。主键或唯一键中的列也可以参与其他约束,包括外键约束。