4

1対多の関係でさらに2つのテーブルをリンクするために使用するテーブルがあります。

TableA
id
name

TableB
id
name

LinkTable
TableA_id
TableB_id

基本的に、TableA の 1 つに複数の 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 を持つことはできません。

解決策は何ですか?

4

2 に答える 2

13

両方の列を一意に設定しようとしましたか?

ALTER TABLE LinkTable 
ADD CONSTRAINT LinkTable_Unique UNIQUE (TableA_id, TableB_id);
于 2013-02-06T11:57:09.273 に答える
5
create table LinkTable (
    TableA_id integer REFERENCES TableA(id),
    TableB_Id integer REFERENCES TableB(id),
    UNIQUE(tableA_id, tableB_id)
);
于 2013-02-06T11:57:53.397 に答える