1

我有两张桌子:HousePicture。该Picture表有一个列homepage,即 abool和 a house_id。这意味着房子有图片,只有标记为的图片homepage才会出现在主页上。

问题:每个房子应该只有一张主页图片。或者:可以有很多(house_id, homepage):(1, False)但只有一个(house_id, homepage):(1, True)元组。我怎样才能使它适用于 PostgreSQL?

这种情况有名字吗?当然,这不是主键,因为可以有很多(1, False)元组。

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

4

1 回答 1

1

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

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

-> sqlfiddle

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

更改架构

另一种方法是在表格中添加一列homepage_idhouse指向选定的图片。自动只能选择一张图片。你不再需要picture.homepage了。由于双向外键约束,参照完整性可能有点棘手,但我有这样的工作解决方案。

于 2013-02-23T15:15:48.770 回答