FK 引用具有相同列的 PK

FK referencing PK with same column

我很惊讶地发现我可以创建一个外键,该外键引用在完全相同的 table 和列上定义的主键,例如:

ALTER TABLE dbo.Foo WITH CHECK ADD CONSTRAINT FK_Foo_Foo FOREIGN KEY(FooId)
REFERENCES dbo.Foo (FooId)

我有一个定义了这样的 FK 的客户数据库,它似乎完全多余。

它有什么用吗?

注意。这不是层次关系的情况——FK 字段不是同一个 table 中充当父 ID 的不同字段,而是 PK 字段本身。

引用自身的外键是循环引用,或无限递归关系。

永远不会违反约束,因为该行始终与自身匹配。

我的猜测是,这要么是设计中的错误,要么是为了将来开发的临时标记,从未跟进。

这是一个完全多余的功能,可以删除或单独保留。我会意识到的一件事是 Microsoft 可能会在更高版本的 SQL Server 中禁止自引用 FK。出于这个原因,如果考虑将来的兼容性,我会倾向于删除约束。

要使父子层次结构起作用,外键必须引用不同的列。