簡體   English   中英

兩列上的PSQL唯一約束

[英]PSQL unique constraint on two columns

我有一個表,用於將兩個表連接在一起,形成一對多的關系。

TableA
id
name

TableB
id
name

LinkTable
TableA_id
TableB_id

基本上,TableA中的一個可以具有許多TableB。 很簡單。 我現在遇到的問題是創建一個遵循此關系規則的約束:

LinkTable
TableA_id    TableB_id
1            1
1            2
1            3
2            1
2            2
2            3

我想創建一個唯一約束,它將兩個列組合在一起作為唯一值。 所以在上面的鏈接表中,有了這個新的約束,我可以

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);

約束將觸發,因為已存在1,1和1,3的行。 如何創建postgres約束來執行此操作? 如果我為兩個行設置了一個唯一約束,那么我就不能有多個TableA_id相同而且多於一個TableB_id相同。

解決辦法是什么?

您是否嘗試將兩列設置為唯一?

ALTER TABLE LinkTable 
ADD CONSTRAINT LinkTable_Unique UNIQUE (TableA_id, TableB_id);
create table LinkTable (
    TableA_id integer REFERENCES TableA(id),
    TableB_Id integer REFERENCES TableB(id),
    UNIQUE(tableA_id, tableB_id)
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM