在PostgreSQL中,如何约束要命名的值等于同一表中的另一个值

gblwokeq  于 2022-11-23  发布在  PostgreSQL
关注(0)|答案(1)|浏览(179)

我想创建一个名为maneges的表,其中一个雇员管理另一个雇员。该表的值为Manager_id和Employee_id,它们都引用了另一个名为employee的表中的值Emp_id。我想设置一个约束条件,使表中不能有两个示例,其中x管理y,y管理x。这是没有意义的。2这个表的另一个属性是经理可以有多个雇员,雇员可以由多个经理管理。3所以,UNIQUE关键字在这个上下文中对我来说似乎没有多大用处。

CREATE TABLE manages
(
    Manager_id  INTEGER REFERENCES employee,
    Employee_id INTEGER REFERENCES employee 
)

我知道NULL关键字,但我只知道如何合并NOT NULL。

CREATE TABLE manages
(
    Manager_id  INTEGER REFERENCES employee NOT <?>,
    Employee_id INTEGER REFERENCES employee NOT <?>
)
kuhbmx9i

kuhbmx9i1#

将NOT NULL约束条件放在数据类型之后。还应使这两列都成为主键:

CREATE TABLE manages
(
    manager_id  INTEGER NOT NULL REFERENCES employee,
    employee_id INTEGER NOT NULL REFERENCES employee, 
    primary key (manager_id, employee_id)
)

主键也会使列为NOT NULL,但我更喜欢明确地说明这一点。
这仍然允许一个雇员由多个经理管理,并且允许一个经理管理多个雇员。它 * 不允许 * 两次插入相同的employee_id和manager_id组合。

相关问题