Postgresql Postgres基于多列值的约束?

Postgresql Postgres基于多列值的约束?,postgresql,Postgresql,在postgres中,如何定义一个约束,使一个值只与其中一个键关联。例如:red只能有key1,green只能有key2 key | value | other ----------------------------------- key1 | red | r1 key1 | blue | b1 key1 | blue | b2

在postgres中,如何定义一个约束,使一个值只与其中一个键关联。例如:
red
只能有
key1
green
只能有
key2

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

这是不允许的,因为值
blue
key1
key2
关联

正确的解决方案是重新设计,以便规范化表格:

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

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

要重新表述您的问题,您正在尝试在唯一键和值之间实施一对一的映射,对吗?有点像内射函数。左侧的不同元素(键)无法映射到右侧的相同元素(值)。@Bharath为了澄清,您的表可以包含具有相同键的多行,对吗?如果重复使用同一个键,那么它们都必须具有相同的值字段?@SamChoukri更新了示例。谢谢laurenz。这是实施约束的正确设计。我不确定它是否会创建太多的表。
CREATE TABLE part1 (
   value text PRIMARY KEY,
   key text NOT NULL
);

CREATE TABLE part2 (
   value REFERENCES part1(value) NOT NULL,
   other text NOT NULL
);