基于Postgres多列值的约束?

时间:2018-09-05 21:11:13

标签: postgresql

key            | value   |  other         
----------------------------------- 
key1           | red     |  r1          
key1           | blue    |  b1  
key1           | blue    |  b2         
key2           | green   |  g
key2           | yellow  |  y

在postgres中,我如何定义约束,使值仅与键之一相关联。例如:red只能有key1green只能有key2

key            | value   |  other         
----------------------------------- 
key1           | red     |  r1          
key1           | blue    |  b1  
key1           | blue    |  b2         
key2           | blue    |  r4
key2           | yellow  |  y  

这是不允许的,因为值bluekey1key2相关联。

1 个答案:

答案 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
);

然后,表结构可以保证约束,并且您不必多次存储冗余数据。