如何在多列之间强制执行类似集合的唯一性?

时间:2012-11-17 12:40:07

标签: sql postgresql unique-constraint

我不确定我是否正确地表达了这个问题,所以我会尝试更长的解释。我有这种表:

CREATE TABLE x (a int, b int);

我想将对(a,b)与(b,a)相同,并禁止插入重复项。如果PostgreSQL有一个set数据类型,我可能会声明这样的表:

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

但事实并非如此,那么最好的方法是什么?

2 个答案:

答案 0 :(得分:4)

create unique index idx_unique_ab 
    on x (least(a,b), greatest(a,b));

答案 1 :(得分:1)

我只是强制执行一对只能以一种方式存储,然后创建一个常规的唯一约束。

CREATE TABLE x
  (
     a INT,
     b INT,
     CHECK (a < b),
     UNIQUE(a, b)
  );