Postgres: два внешних ключа для одного поля первичного ключа - PullRequest
0 голосов
/ 19 октября 2011
create table date_dimension (
id serial primary key,
date_id date,
..... others
);

create table temp (
id serial primary key,
from_date integer,
to_date integer,
value integer,
foreign key (from_date, to_date) references date_dimension(id, id)
);  

Как я могу отнести и from_date, и to_date к полю id в date_dimension?
Текущий код не может сделать это, говоря:

ERROR:  there is no unique constraint matching given keys for referenced table "date_dimension"  

Спасибо

1 Ответ

5 голосов
/ 19 октября 2011

каждое FOREIGN KEY ограничение, добавленное в таблицу, всегда будет связывать одну строку в ссылочной таблице с одной строкой * в референте.Если вы хотите, чтобы каждая строка в ссылке ссылалась на две отдельные строки в референте, вам нужны два отдельных ограничения внешнего ключа.

Вы хотите:

foreign key (from_date) references date_dimension(id)
foreign key (to_date) references date_dimension(id)

Вы почти всегдахотите, чтобы во внешнем ключе были точно такие же строки, что и в первичном ключе в референте.

* На самом деле, в референте может быть несколько строк, если внешний ключ меньшечем ключ кандидата от референта.хотя это редко полезно и почти наверняка не связано с проблемой, которую вы описываете

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...