我可以将值设置为仅允许在单个"组中使用#34;

时间:2015-06-07 01:30:09

标签: postgresql constraints unique-constraint

我有一张类似于这样的表:

 code | group
------+------
  1   |   a
  1   |   a
  2   |   a
  9   |   b
  9   |   b
  8   |   b

有没有办法设置约束,以便相同的代码只能出现在一个组中?

因此,例如添加行code=3; group=a不会违反约束,但添加行code=1; group=b将违反约束。

1 个答案:

答案 0 :(得分:1)

如果这些字段在同一个表中,我不相信你能做到。在我看来,您有一个层次结构,group是主要级别,code是详细信息。我看到这可以用3个表来解决:

CREATE TABLE "group" (
    id "char" CONSTRAINT "group_pk" PRIMARY KEY
)

CREATE TABLE "code" (
    id INTEGER CONSTRAINT "code_pk" PRIMARY KEY,
    group_id "char",
    FOREIGN KEY group_id REFERENCES "group" (id)
)

CREATE TABLE "data" (
    id INTEGER CONSTRAINT "data_pk" PRIMARY KEY,
    code_id "char",
    ...
    FOREIGN KEY code_id REFERENCES "code" (id)
)

其中data表代表您正在谈论的表。