浏览数据库时,我发现了一张表,它使用其主键作为自身的外键。
我已经看到一个表可以有一个外键来构建层次结构,但它会使用另一列来引用主键。
由于主键是唯一的,在这种情况下,行不只能指向自身吗?这似乎是一个重言式的链接,因为如果我已经有了行,那么我已经有了行。
有什么理由这样做吗?
我确信约束是这样写的(不仅仅是看图表),因为同一个表和列用于定义的两半。
像你说的。引用同一个表的FOREIGN KEY
约束通常用于层次结构,它会使用另一列来引用主键。一个很好的例子是员工表:
EmployeeId Int Primary Key
EmployeeName String
ManagerId Int Foreign key going back to the EmployeeId
所以在这种情况下,有一个从表返回到自身的外键。所有经理也是员工,因此ManagerId
实际上是EmployeeId
经理的。
现在另一方面,如果您的意思是有人使用EmployeeId
Employee 表作为外键,那么这可能是一个错误。我确实进行了测试,这是可能的,但它没有任何实际用途。
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);