2016-01-22 3 views
0

У меня есть таблицы А и В, и выглядеть следующим образом:Как реализовать необязательное отношение?

CREATE TABLE A (id integer CONSTRAINT aid PRIMARY KEY); 

Теперь я хочу, чтобы смоделировать необязательную один-ко-многим между А и В. Как правило, я бы расширить определение B, как так:

CREATE TABLE B (
    id integer CONSTRAINT bid PRIMARY KEY, 
    a_id integer REFERENCES A(id) 
); 

но теперь a_id не может быть null, так что отношение не является обязательным. Поэтому в основном я хочу назначить null этому столбцу, но если значение не равно нулю, оно должно ссылаться на A.id.

+2

Вы пытались помещать значение 'NULL' в столбец' a_id'? –

ответ

1

Да, a_id может быть пустым в таблице B. Я попробовал:

tmp=# CREATE TABLE A (id integer CONSTRAINT aid PRIMARY KEY); 
CREATE TABLE 
tmp=# CREATE TABLE B (
tmp(#  id integer CONSTRAINT bid PRIMARY KEY, 
tmp(#  a_id integer REFERENCES A(id) 
tmp(#); 
CREATE TABLE 
tmp=# insert into B (id,a_id) VALUES (3,null); 
INSERT 0 1 
tmp=# 

Текущая модель данных работает.

+1

К сожалению, действительно! Я должен ошибаться в столбцах или что-то, когда я получил ошибку. Как смущающе. – Dunno

+0

действительно, если вы хотите сделать это правильно, вы делаете третий стол –

+0

@johannes_lalala, хотите ли вы предоставить ссылку? –

-2

вы сделаете еще одну таблицу, которая связывает А и В, что только содержит «необязательные» отношения