【问题标题】:Model XOR check into unique constraint模型异或检查到唯一约束
【发布时间】:2018-08-16 06:21:01
【问题描述】:

我正在建模一个带有 user_idpost_idreaction 列的反应表。我希望这行中的条目是唯一的,这可以通过唯一索引轻松实现。

reactions 可以是likedislikeviewedapplauded

现在的问题是,我还想为 likedislike 建模 XOR 关系,这意味着,当给定的 pst 和用户已经有一行 like 时,这是不可能的用dislike添加另一行。

由于还有其他可选反应,我不知道为此编写约束检查。这甚至可能吗?

【问题讨论】:

    标签: sql postgresql database-design constraints


    【解决方案1】:

    您只希望在reaction'like''dislike' 时应用(user_id, post_id) 唯一性。那是partial index

    当存在WHERE 子句时,会创建一个部分索引。部分索引是只包含表的一部分条目的索引,通常是比表的其余部分对索引更有用的部分。 [...] 另一个可能的应用是使用 WHEREUNIQUE 在表的子集上强制唯一性。

    你想要这样的索引:

    create unique index INDEX_NAME
    on TABLE_NAME (user_id, post_id)
    where reaction in ('like', 'dislike')
    

    当然,您可以在其中为 INDEX_NAMETABLE_NAME 提供值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-10
      • 1970-01-01
      • 2011-06-10
      • 2013-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多