sql*_*ild 11 sql sql-server-2005 key foreign-keys primary-key
为什么必须在一个表的列上具有主键,而另一个表的列具有外键引用.
create table D(Did int)
create table E(Eid int foreign key references D(Did))
Run Code Online (Sandbox Code Playgroud)
上面的查询给出了错误:
There are no primary or candidate keys in the referenced table 'D' that match
the referencing column list in the foreign key 'FK__E__Eid__79C80F94'.
Run Code Online (Sandbox Code Playgroud)
nvo*_*gel 17
非常好的问题.引用约束不应引用候选键之外的其他内容,这没有根本原因.这种约束甚至有一个名称:包含依赖性.外键只是一种包含依赖项,其中约束的目标恰好是候选键.
不幸的是,SQL通常不能为包含依赖项提供良好的支持,甚至也不提供参考约束.SQL将其所谓的FOREIGN KEY约束限制为引用UNIQUE或PRIMARY KEY约束的列(尽管不一定是候选键).
所以你遇到的实际上是SQL的一个可疑限制.这并不意味着你做错了什么.