一尘不染

为什么表会将其主键用作自身的外键

sql-server

浏览数据库时,我发现了一张表,它使用其主键作为自身的外键。

我已经看到一个表可以有一个外键来构建层次结构,但它会使用另一列来引用主键。

由于主键是唯一的,在这种情况下,行不只能指向自身吗?这似乎是一个重言式的链接,因为如果我已经有了行,那么我已经有了行。

有什么理由这样做吗?

连接到自身的表

我确信约束是这样写的(不仅仅是看图表),因为同一个表和列用于定义的两半。


阅读 174

收藏
2022-11-13

共1个答案

一尘不染

像你说的。引用同一个表的FOREIGN KEY约束通常用于层次结构,它会使用另一列来引用主键。一个很好的例子是员工表:

EmployeeId    Int     Primary Key
EmployeeName  String
ManagerId     Int     Foreign key going back to the EmployeeId

所以在这种情况下,有一个从表返回到自身的外键。所有经理也是员工,因此ManagerId实际上是EmployeeId经理的。

现在另一方面,如果您的意思是有人使用EmployeeIdEmployee 表作为外键,那么这可能是一个错误。我确实进行了测试,这是可能的,但它没有任何实际用途。

CREATE TABLE Employee (EmployeeId Int PRIMARY KEY,
                        EmployeeName varchar(50),
                        ManagerId Int);


ALTER TABLE Employee ADD CONSTRAINT fk_employee 
    FOREIGN KEY (EmployeeId) REFERENCES Employee(EmployeeId);
2022-11-13