[英]Postgres unique constraint across multiple values of a column
我的一张桌子有一个棘手的唯一性要求。
假设我们有一桌狗。 狗住在房子里。
CREATE TABLE dogs (
dog_id integer,
house_id integer,
dogname varchar
}
狗的名字在房子里必须是唯一的。 还有一个“主”屋,没有一只狗可以和主屋里的狗同名。
例如,其中 house_id 0 是“主”房子:
dog_id house_id dogname
1 0 Fido
2 0 Rover
3 1 Shep
4 1 Shep // FAIL, not unique in house 1
5 2 Shep // ok, allowed
6 2 Fido // FAIL, conflict with main house
如何创建一个对此建模的唯一性约束?
我在想有一种方法可以通过排除约束来做到这一点,但我还没有弄清楚怎么做。
我更喜欢使用约束而不是触发器来执行此操作,因为我还想在此表上进行更新插入,并且您只能使用带有约束的 ON CONFLICT。
对于未来的访问者:我能解决这个问题的唯一方法是先查询冲突记录,然后只有在没有冲突的情况下才进行插入。 如果您将两个命令都包装在事务中,则此方法有效。 我必须在应用程序中执行此操作,而不是在数据库级别。 不是一个理想的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.