Postgres基于多列值的约束?

问题描述 投票:0回答:1
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相关联。

postgresql
1个回答
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
);

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

© www.soinside.com 2019 - 2024. All rights reserved.