我们可以有一个外键不是任何其他表中的主键吗?

它写在每本书中,外键实际上是其他表中的主键,但是我们可以在其他表中有一个不是主键的外键

是的 – 您可以拥有引用另一个表中唯一索引的外键。

CREATE UNIQUE INDEX UX01_YourTable ON dbo.YourTable(SomeUniqueColumn) ALTER TABLE dbo.YourChildTable ADD CONSTRAINT FK_ChildTable_Table FOREIGN KEY(YourFKColumn) REFERENCES dbo.YourTable(SomeUniqueColumn) 

根据定义,外键必须引用某个表的候选键。 它不一定是主键。

详细而言,在SQL中称为FOREIGN KEY的约束与关系模型中外键的​​教科书定义并不完全等价。 SQL的FOREIGN KEY约束不同,因为:

  • 它可以引用符合唯一性约束的任何一组列,即使它们不是候选键(例如,超级键或可为空的列)。
  • 它可能包含空值,在这种情况下约束不被执行
  • 它的语法依赖于列顺序,因此(A,B)引用(A,B)上的fk约束与(B,A)引用(A,B)上的约束是不同的。

是的,在其他表中可以有一个外键是唯一键,唯一键是主键的子集,但不是确切的主键。

所以这可能是外键是另一个表中的唯一键。

一般的标准答案是否定的。 只有在外键引用其他表中唯一的列时才有可能。 这意味着外键必须是其他表中的候选键,主键也是候选键。