【发布时间】:2012-01-04 20:28:12
【问题描述】:
我有以下 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'
即:我想确保插入tblC 的元组对存在于tblB 中。但我不能这样做,因为pkID2 不是关键。真的 tblB 可以将 tblAID, pkID2 作为复合主键。但是 tblAID 仍然必须是 tblA.ID 的 FK。
【问题讨论】:
-
这是半说辞,但为什么你放入 tblC 的列不能直接进入 tblB?
-
我不清楚你想要完成什么。此约束的目的是防止向 tblC 添加行,除非 tblB 包含类似 tblAID 和 pkID2 值,并防止在 tblC 包含类似 tblAID 和 pkID2 值时从 tblB 中删除?
标签: sql sql-server foreign-keys primary-key constraints