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