Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 唯一约束表,使每个具有liquibase的唯一团队仅允许一个真值_Sql_Postgresql_Liquibase - Fatal编程技术网

Sql 唯一约束表,使每个具有liquibase的唯一团队仅允许一个真值

Sql 唯一约束表,使每个具有liquibase的唯一团队仅允许一个真值,sql,postgresql,liquibase,Sql,Postgresql,Liquibase,我有一个存储团队成员的sql联接表。team和people表已经存在,team_members表连接这两个表 team members表还包括另一个布尔列team_lead,它表示给定团队的领导者。每个团队只能有一个领导者,这让我感到震惊:) 我想添加一个唯一的约束,以确保每个团队只存在一个团队领导。本质上,我希望确保每个team_id列的唯一值在team_lead列中只能存在一个具有真值的行,但是对于team_lead,任何数量的行都可能存在具有假值的行 我想添加第二个约束,防止从team_成

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

team members表还包括另一个布尔列team_lead,它表示给定团队的领导者。每个团队只能有一个领导者,这让我感到震惊:)

我想添加一个唯一的约束,以确保每个团队只存在一个团队领导。本质上,我希望确保每个team_id列的唯一值在team_lead列中只能存在一个具有真值的行,但是对于team_lead,任何数量的行都可能存在具有假值的行

我想添加第二个约束,防止从team_成员数据库中删除team_lead。在删除行之前,必须将team_lead值设置为false


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

不要向TeamMembers表添加布尔值,而是向team表添加lead\u team\u member列,该列将引用作为领导者的成员的TeamMember记录


不需要复杂的约束,您可以使用适当的外键来防止删除团队负责人的团队成员记录。

这是一个很好的观点,除非我不希望修改代码所依赖的现有表(如果可能)。我知道你的方法更有意义,但是,由于缺乏更好的措辞方式,与你建议的方法相比,上述方法有多糟糕?由于修改技术上我不拥有的现有java代码(但如果必须的话,我可以修改)的费用而不想修改已经在使用的表,这是否足以证明没有按照您建议的方式进行修改?我不认为您会后悔拥有正确的数据模型,并且您当前的模型有“技术债务”上面写满了。