1

質問の言い回しが正しいかどうかわからないので、もっと長い説明をしてみます。私はこの種のテーブルを持っています:

CREATE TABLE x (a int, b int);

ペア(a、b)を(b、a)と同一であると見なし、重複の挿入を禁止したいと思います。PostgreSQLのデータ型がsetデータ型の場合、次のようにテーブルを宣言できます。

CREATE TABLE x (
    ab set,
    UNIQUE (ab)
);

しかし、そうではないので、これを行うための最良の方法は何ですか?

4

2 に答える 2

4
create unique index idx_unique_ab 
    on x (least(a,b), greatest(a,b));
于 2012-11-17T12:43:01.100 に答える
1

ペアは一方向にしか保存できないことを強制してから、通常の一意の制約を作成します。

CREATE TABLE x
  (
     a INT,
     b INT,
     CHECK (a < b),
     UNIQUE(a, b)
  ); 
于 2012-11-17T12:43:42.450 に答える