Два составных внешних ключа с одним общим столбцом - PullRequest
0 голосов
/ 19 апреля 2020

Я пытаюсь отобразить следующую модель ER в PostgreSQL, и у меня возникают проблемы с таблицей Issue_Label . Требуется ключ из таблицы Issue , который является id , и ключ из таблицы Label , который представляет собой пару (id, project_id) .

ER Model Однако я хочу убедиться, что project_id из таблицы Issue (которая не является частью первичный ключ) и таблица Label совпадают. Я попробовал следующее:

CREATE TABLE issue_label (
    issue_id UUID,
    label_name TEXT,
    project_id UUID,
    FOREIGN KEY (issue_id, project_id) REFERENCES issue(id, project_id),
    FOREIGN KEY (label_name, project_id) REFERENCES label(name, project_id),
    PRIMARY KEY (issue_id, label_name, project_id)
);

, но я продолжаю получать эту ошибку:

ERROR:  there is no unique constraint matching given keys for referenced table "issue"
SQL state: 42830

Как это исправить, желательно без необходимости изменения таблицы Issue ключ?

1 Ответ

1 голос
/ 19 апреля 2020

Если:

  • Ключ из таблицы Issue - id, а
  • Ключ из таблицы Label - пара (id, project_id)

Тогда внешние ключи должны иметь вид:

CREATE TABLE issue_label (
    issue_id UUID,
    label_name TEXT,
    project_id UUID,
    FOREIGN KEY (issue_id) REFERENCES issue(id),
    FOREIGN KEY (issue_id, project_id) REFERENCES label(id, project_id),
    PRIMARY KEY (issue_id, label_name, project_id)
);
...