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