两个具有共同一列的复合外键
Two composite foreign keys with one column in common
我正在尝试将以下 ER 模型映射到 PostgreSQL 中,但我在使用 Issue_Label table 时遇到了问题。它需要来自 Issue table 的密钥,即 id 和 Label[=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)
);
我正在尝试将以下 ER 模型映射到 PostgreSQL 中,但我在使用 Issue_Label table 时遇到了问题。它需要来自 Issue table 的密钥,即 id 和 Label[=30] 的密钥=] table,这是一对 (id, project_id).
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)
);