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 回答