Нет уникального ограничения соответствия заданным ключам для таблицы

Вопрос:У меня есть определение таблицы 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:

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

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

Лучший ответ:

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

foreign key (evaluation_date) references date_dimension(id), foreign key (effective_date) references date_dimension(id) Ответ №1

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

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

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

CREATE UNIQUE INDEX date_dimension(id,id);

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

FOREIGN KEY (evaluation_date) REFERENCES date_dimension(id);

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

Или… вы, вероятно, действительно хотите два отношения FK:

FOREIGN KEY (evaluation_date) REFERENCES date_dimension(id); FOREIGN KEY (effective_date) REFERENCES date_dimension(id); Ответ №2

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

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

Оцените статью
Добавить комментарий