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

时间:2010-05-24 06:42:42

标签: sql sql-server database-design foreign-keys

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

4 个答案:

答案 0 :(得分:42)

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

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)

答案 1 :(得分:14)

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

作为一个细节问题,SQL中称为FOREIGN KEY的约束并不完全等同于关系模型中外键的​​教科书定义。 SQL的FOREIGN KEY约束因:

而不同
  • 它可以引用受唯一性约束限制的任何列,即使它们不是候选键(例如超级键或可空列)。
  • 它可能包含空值,在这种情况下不强制执行约束
  • 其语法取决于列顺序,因此(A,B)引用(A,B)上的fk约束与(B,A)引用(A,B)上的约束不同。

答案 2 :(得分:3)

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

因此外键可能是另一个表中的唯一键。

答案 3 :(得分:0)

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