我有两张桌子:House
和Picture
。Picture
表有一列homepage
,这是一个bool
和一个house_id
。这意味着房屋有图片,只有标记为homepage
的图片才会出现在主页中。
问题:每家每户只能有一张主页图片。或者:可以有多个(house_id, homepage):(1, False)
元组,但只有一个(house_id, homepage):(1, True)
元组。我怎样才能让它为PostgreSQL工作呢?
这种情况有名字吗?当然,这不是主键,因为可以有许多(1, False)
元组。
数据库上的解决方案有帮助。加分:一个关于如何在Django上实现的解决方案,在模型层,将是伟大的!
最佳答案
如果您想始终保证数据的完整性,可以(而且应该)在数据库级别解决这个问题。有多种方法,apartialUNIQUE INDEX
可能是最简单和最有效的。
CREATE UNIQUE INDEX picture_homepage_uni ON picture (house_id) WHERE homepage;
->sqlfiddle
还将加快查询,以检索作为附带利益的主页图片。
更改架构
另一种方法是将一列
homepage_id
添加到表house
中,指向所选图片。自动,只能选择一张图片。你不需要了。由于两个方向上的外键约束,引用完整性可能有点棘手,但我有这样的工作解决方案。关于database - 表格中的独特组合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15040695/