两列上的PSQL唯一约束

Ozz*_*zzy 2 sql constraints unique relationship psql

我有一个表,用于将两个表连接在一起,形成一对多的关系.

TableA
id
name

TableB
id
name

LinkTable
TableA_id
TableB_id
Run Code Online (Sandbox Code Playgroud)

基本上,TableA中的一个可以具有许多TableB.非常简单.我现在遇到的问题是创建一个遵循此关系规则的约束:

LinkTable
TableA_id    TableB_id
1            1
1            2
1            3
2            1
2            2
2            3
Run Code Online (Sandbox Code Playgroud)

我想创建一个唯一约束,它将两个列组合在一起作为唯一值.所以在上面的链接表中,有了这个新的约束,我可以

INSERT INTO LinkTable (TableA_id, TableB_id) VALUES (1, 4);
INSERT INTO LinkTable (TableA_id, TableB_id) VALUES (1, 5);
INSERT INTO LinkTable (TableA_id, TableB_id) VALUES (2, 6);
INSERT INTO LinkTable (TableA_id, TableB_id) VALUES (3, 1);

With out any problems

And if I try to insert:

INSERT INTO LinkTable (TableA_id, TableB_id) VALUES (1, 1);
INSERT INTO LinkTable (TableA_id, TableB_id) VALUES (1, 3);
Run Code Online (Sandbox Code Playgroud)

约束将触发,因为已存在1,1和1,3的行.如何创建postgres约束来执行此操作?如果我为这两行设置了一个唯一约束,那么我就不能有多个TableA_id相同而且多于一个TableB_id相同.

解决办法是什么?

Joh*_*Woo 8

您是否尝试将两列设置为唯一?

ALTER TABLE LinkTable 
ADD CONSTRAINT LinkTable_Unique UNIQUE (TableA_id, TableB_id);
Run Code Online (Sandbox Code Playgroud)


pau*_*aul 5

create table LinkTable (
    TableA_id integer REFERENCES TableA(id),
    TableB_Id integer REFERENCES TableB(id),
    UNIQUE(tableA_id, tableB_id)
);
Run Code Online (Sandbox Code Playgroud)