【问题标题】:Unique combination in a table表格中的独特组合
【发布时间】:2013-02-23 12:48:23
【问题描述】:

我有两张桌子:HousePicturePicture 表有一个列homepage,它是一个bool 和一个house_id。这意味着房子有图片,只有标记为homepage的图片才会出现在首页。

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

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

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

【问题讨论】:

    标签: database django postgresql


    【解决方案1】:

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

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

    ->sqlfiddle

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

    更改架构

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多