SQL - 表示一元(递归)关系



>我必须实现一个以这种方式工作的一元关系:

有一个实体,称为员工,每个员工都可以由另一个员工管理,直到老板不受任何人管理。

我尝试了这个查询:

CREATE TABLE employee
(id         INTEGER PRIMARY KEY,
name       VARCHAR(40) NOT NULL,
managed_by INTEGER REFERENCES employee);

但是不起作用,因为我认为在SQL中外不能引用自己的实体。

如何以正确的方式表示这种递归关系?

是的,外键可以引用自己的实体。这是一种非常常见的模式。

下面是它的样子:

CREATE TABLE `employee` (
`id` int NOT NULL,
`name` varchar(40) NOT NULL,
`managed_by` int DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `managed_by` (`managed_by`),
CONSTRAINT `employee_ibfk_1` FOREIGN KEY (`managed_by`) REFERENCES `employee` (`id`)
);

但是,查询递归关系有点棘手。您可能想阅读我的回答 将平面表解析为树的最有效/最优雅的方法是什么?

最新更新