SQL - 表示一元(递归)关系
SQL - Represent an unary (recursive) relationship
我必须实现以这种方式工作的一元关系:
有一个名为Employee的实体,每个Employee都可以由另一个Employee管理,直到boss不被任何人管理。
我试过这个查询:
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`)
);
不过,查询递归关系有点棘手。您可能想阅读我对 What is the most efficient/elegant way to parse a flat table into a tree?
的回答
我必须实现以这种方式工作的一元关系:
有一个名为Employee的实体,每个Employee都可以由另一个Employee管理,直到boss不被任何人管理。
我试过这个查询:
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`)
);
不过,查询递归关系有点棘手。您可能想阅读我对 What is the most efficient/elegant way to parse a flat table into a tree?
的回答