表中的独特组合

时间:2013-02-23 12:48:23

标签: database django postgresql

我有两个表:HousePicturePicture表格中有一列homepage,即boolhouse_id。这意味着房屋有图片,只有标记为homepage的图片才会显示在主页上。

问题:每个房子应该只有一个主页图片。或者:可以有尽可能多的(house_id, homepage):(1, False)但只有一个(house_id, homepage):(1, True)元组。我怎样才能为PostgreSQL做这个工作?

这样的情况有名字吗?当然,这不是主键,因为可能有许多(1, False)元组。

数据库上的解决方案有帮助。 奖励点:关于如何在模型层上的Django上实现它的解决方案将会很棒!

1 个答案:

答案 0 :(得分:1)

如果您想始终保证数据完整性,它可以(并且应该)在数据库级别上解决。有多种方式,partial UNIQUE INDEX可能是最简单和最有效的方法。

CREATE UNIQUE INDEX picture_homepage_uni ON picture (house_id) WHERE homepage;

->sqlfiddle

还会加快查询以检索主页图片作为附带利益。

更改架构

另一种方法是将列homepage_id添加到表house,指向所选图片。自动只能选择1张图片。你不再需要picture.homepage了。由于两个方向上的外键约束,参照完整性可能有点棘手,但我有类似的工作解决方案。