2017-08-01 9 views
0

私はおそらく愚かな問題を抱えています。私はそれを正しい方法で解決しようとしているのかどうかは分かりませんが、ここはそうです。Postgresqlには、「オプション」のヌル入力可能な外部キーが含まれていますか?

私には複数の従業員を含む部門があり、従業員は部門に割り当てることができますが、必ずしもそうである必要はありません。私は部門番号を従業員の外来キーとして使用することを考えましたが、部門に属さない従業員はどうですか? fk列にnullを挿入するだけでいいですか?しかし、参照された列に存在する値だけを挿入できないため、それが機能するかどうかは疑問です。ここで

が、私はこの質問はすでに百倍に答えられていないと、最後の2時間のためにそれを探しながら、私はちょうど私の答えを見つけていないと思っている私の関連するコード

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; 

OUTPUTところで

enter image description here

+0

: '(depno int型のユニークなnullでない、主キー(depno)'です余分な主キーは 'not null'と' unique'の定義によるものです。ちょうど 'depno int主キー'で十分です。 – krokodilko

+0

@krokodilkoそうです、私は従業員テーブルを修正しましたが、部署1をチェックしませんでした。また、フィールドを宣言した同じ行で外部キーを参照することもできます。 –

+0

また、あなたのPKに 'SERIAL'タイプを使用して、postgresがIDを扱わせるようにしてください。 –

関連する問題