key | value | other
-----------------------------------
key1 | red | r1
key1 | blue | b1
key1 | blue | b2
key2 | green | g
key2 | yellow | y
在postgres中,我如何定义约束,使值仅与键之一相关联。例如:red
只能有key1
,green
只能有key2
?
key | value | other
-----------------------------------
key1 | red | r1
key1 | blue | b1
key1 | blue | b2
key2 | blue | r4
key2 | yellow | y
这是不允许的,因为值blue
与key1
和key2
相关联。
答案 0 :(得分:1)
正确的解决方案是重新设计,以便对表进行规范化
CREATE TABLE part1 (
value text PRIMARY KEY,
key text NOT NULL
);
CREATE TABLE part2 (
value REFERENCES part1(value) NOT NULL,
other text NOT NULL
);
然后,表结构可以保证约束,并且您不必多次存储冗余数据。