【问题标题】:Uniquely constrain table to allow only one true value per unique team with liquibase唯一约束表,以使每个具有 liquibase 的唯一团队仅允许一个真实值
【发布时间】:2015-08-20 21:21:30
【问题描述】:

我有一个存储团队成员的 sql 连接表。 team 和 people 表已经存在,team_members 表连接了这两个表。

团队成员表还包括另一个布尔列 team_lead,它代表给定团队的领导者。每个团队只能有一个领导者,我知道这很令人震惊:)。

我想添加一个独特的约束,以确保每个团队只有一个团队负责人。本质上,我想确保 team_id 列的每个唯一值在 team_lead 列中只能存在一个值为 true 的行,但对于 team_lead 可能存在任意数量的值为 false 的行。

我想添加第二个约束,以防止从 team_member 数据库中删除 team_lead,必须将 team_lead 值设置为 false,然后才能删除行。

看起来部分密钥可能是解决方案,但是,老实说,我对它们并不熟悉,我也不确定 liquibase 是否允许使用它们。我不期望完整的 sql,但有人可以帮助我了解我应该使用什么工具以及为什么要强制执行此操作?

【问题讨论】:

    标签: sql postgresql liquibase


    【解决方案1】:

    不向 TeamMembers 表添加布尔值,而是向团队表添加一个lead_team_member 列,该列将引用作为领导者的成员的 TeamMember 记录。

    不需要棘手的约束,您可以使用适当的外键来防止删除作为团队领导的 TeamMember 记录。

    【讨论】:

    • 这是一个很好的观点,但如果可能的话,我不希望修改我们的代码所依赖的现有表。我知道您的方法如何更有意义,但是由于缺乏更好的表述方式,上述方法与您的建议相比会有多“糟糕”?是否不想修改已经被使用的表,因为修改现有的 Java 代码的费用我在技术上并不拥有(但如果我必须修改)有足够的理由不按照您建议的方式进行操作?
    • 我认为您永远不会后悔拥有一个正确的数据模型,而您当前的模型到处都是“技术债务”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 2010-10-20
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    相关资源
    最近更新 更多