我有两张桌子:HousePicturePicture表有一列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/

10-16 21:54