Postgresql 包括“可选”,可为空的外键?

Arw*_*wen 3 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)
Run Code Online (Sandbox Code Playgroud)

我希望这个问题还没有被回答一百次,我只是在过去两个小时的搜索中没有找到我的答案。但我似乎无法找到有关这是否应该起作用的任何信息。

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

Jua*_*eza 7

这项工作在 postgresql 中

SQL 演示

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;
Run Code Online (Sandbox Code Playgroud)

输出

在此处输入图片说明