Postgresql包括"可选",可以为空的外键?

时间:2017-08-01 15:58:55

标签: postgresql null foreign-keys

所以我有一个可能很愚蠢的问题,我甚至不知道我是否正在尝试以正确的方式解决它,但现在就是这样。

我有一个有几个员工的部门,一个员工可以被分配到一个部门,但不是必须的。我想把部门不用作员工的外键,但是那些不属于部门的员工呢? 我可以在fk列中插入null吗?但是我想知道这是否有效,因为我不能仅插入引用列中存在的值吗?

这是我的相关代码

CREATE TABLE department(depno int unique not null,
                        primary key(depno));

CREATE TABLE employee(ID int unique not null, name not null,
                      depno int,
                      primary key(ID))
                      foreign key(depno)
                      references department(depno)

我希望这个问题已经没有被回答过一百次,而我在最近两个小时内找不到答案。但我似乎无法找到关于这是否应该起作用的任何内容。

任何提示或解决方案将不胜感激! 非常感谢你!

1 个答案:

答案 0 :(得分:2)

这项工作在postgresql

<强> SQL DEMO

CREATE TABLE department(depno int PRIMARY KEY);

CREATE TABLE employee(ID int PRIMARY KEY,
                      name text not null,
                      depno int references department(depno)
                      );


INSERT INTO department  VALUES (1);
INSERT INTO department  VALUES (2);

INSERT INTO employee  VALUES (1, 'Jhon Doe', null); -- INSERT OK
INSERT INTO employee  VALUES (2, 'Jane Doe', 3);    -- VIOLATE FK

SELECT * FROM employee;

<强>输出

enter image description here