2017-08-01 55 views
0

所以我有一個大概愚蠢的問題,我甚至不知道如果我想解決這個問題的正確途徑,但在這裏它是。Postgresql包含「可選」,可爲空的外鍵?

我有幾個員工部門,員工可以分配到一個部門,但不必須。我認爲使用部門不作爲員工的外鍵,但那些不屬於部門的員工呢? 我可以在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) 

我希望這個問題尚未已經回答了一百次,我只是還沒有找到我的答案,而尋找它在過去的兩小時。但我似乎無法找到任何關於這是否應該起作用的事情。

任何提示或解決方案將不勝感激! 非常感謝你!

回答

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

+0

BTW:'(depno int唯一不爲空,主鍵(depno)'是多餘的主鍵由定義'not null'和'unique'定義,只是:'depno int主鍵'就夠了。 – krokodilko

+0

@krokodilko你說得對,我固定的職員表,但沒有檢查部門之一。您也可以在聲明該字段的同一行上引用外鍵。 –

+0

另外你應該爲你的PK使用'SERIAL'類型,並讓Postgres的處理ID。 –