Нет уникального ограничения, соответствующего заданным ключам для ссылочной таблицы - PullRequest
18 голосов
/ 30 ноября 2011

У меня есть date_dimension определение таблицы:

CREATE TABLE date_dimension
(
  id integer primary key,
  date text,
  year double precision,
  year_for_week double precision,
  quarter double precision
);

Я пытаюсь создать таблицу fact, которая завершается ошибкой

create table fact ( 
  id serial primary key,
  contract integer,
  component integer,
  evaluation_date integer,
  effective_date integer,
  foreign key (evaluation_date, effective_date) references date_dimension(id, id)
);

Ошибка:

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

SQL state: 42830 

Я не уверен, как это исправить.

Ответы [ 3 ]

15 голосов
/ 30 ноября 2011

Ошибка указывает на проблему: у вас нет уникального ограничения на date_dimension, которое соответствует вашему ограничению внешнего ключа.

Однако это приводит к более серьезной проблеме проектирования: ваши отношения внешнего ключа неЭто не имеет никакого смысла.

Вы могли бы решить свою "проблему" с помощью:

CREATE UNIQUE INDEX date_dimension(id,id);

Но это глупо, потому что id всегда одинаков.Это также может быть выражено как:

FOREIGN KEY (evaluation_date) REFERENCES date_dimension(id);

Затем избавьтесь от столбца effective_date, который в вашем примере всегда будет идентичен evaluation_date.

Или ... вывероятно действительно хочет два отношения ФК:

FOREIGN KEY (evaluation_date) REFERENCES date_dimension(id);
FOREIGN KEY (effective_date) REFERENCES date_dimension(id);
10 голосов
/ 30 ноября 2011

Я думаю, что вы ищете два отдельных внешних ключа:

foreign key (evaluation_date) references date_dimension(id),
foreign key (effective_date) references date_dimension(id)
2 голосов
/ 30 ноября 2011

Разве вы не хотите просто создать две отдельные ссылки внешнего ключа на измерение даты следующим образом:

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