我有两个表:House
和Picture
。 Picture
表格中有一列homepage
,即bool
和house_id
。这意味着房屋有图片,只有标记为homepage
的图片才会显示在主页上。
问题:每个房子应该只有一个主页图片。或者:可以有尽可能多的(house_id, homepage):(1, False)
但只有一个(house_id, homepage):(1, True)
元组。我怎样才能为PostgreSQL做这个工作?
这样的情况有名字吗?当然,这不是主键,因为可能有许多(1, False)
元组。
数据库上的解决方案有帮助。 奖励点:关于如何在模型层上的Django上实现它的解决方案将会很棒!
答案 0 :(得分:1)
如果您想始终保证数据完整性,它可以(并且应该)在数据库级别上解决。有多种方式,partial UNIQUE INDEX
可能是最简单和最有效的方法。
CREATE UNIQUE INDEX picture_homepage_uni ON picture (house_id) WHERE homepage;
还会加快查询以检索主页图片作为附带利益。
另一种方法是将列homepage_id
添加到表house
,指向所选图片。自动只能选择1张图片。你不再需要picture.homepage
了。由于两个方向上的外键约束,参照完整性可能有点棘手,但我有类似的工作解决方案。