两个具有共同一列的复合外键

Two composite foreign keys with one column in common

我正在尝试将以下 ER 模型映射到 PostgreSQL 中,但我在使用 Issue_Label table 时遇到了问题。它需要来自 Issue table 的密钥,即 idLabel[=30] 的密钥=] table,这是一对 (id, project_id).

但是,我想确保 project_id 来自 Issue table (这不是主键的一部分) 和 Label table 是一样的。 我尝试了以下方法:

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

我该如何解决这个问题,最好不必更改 问题 table 键?

如果:

  • 来自 Issue table 的密钥是 id
  • 来自 Label table 的密钥是对 (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)
);