一条记录中选定字段中唯一值的 Liquibase 约束
Liquibase constraint for unique value in selected fields in one record
我需要创建某种约束来禁止在一条记录中插入相同的值。例如,有一个实体 GradientBaloon,其字段为 TopColor、MiddleColor、BottomColor这些字段的 和 none 可以与其他字段具有相同的值。渐变可以是红、蓝、绿,但不能是红、红、蓝。但它不像常规的唯一约束与数据库中同类的其他记录进行比较。
如何在 liquibase 中实现它?
您可以对所有 3 列(TopColor
、MiddleColor
和 BottomColor
)使用检查约束以确保它们不是相同的值:
changeSet:
id: ...
author: ...
changes:
- addCheckConstraint:
constraintBody: TopColor <> MiddleColor <> BottomColor
constraintName: someName
tableName: GradientBaloon
validate: true
会翻译成下面的SQL,可以包含在changeSet的sql
部分:
ALTER TABLE GradientBaloon ADD CONSTRAINT TopColor CHECK (TopColor <> MiddleColor <> BottomColor);
我需要创建某种约束来禁止在一条记录中插入相同的值。例如,有一个实体 GradientBaloon,其字段为 TopColor、MiddleColor、BottomColor这些字段的 和 none 可以与其他字段具有相同的值。渐变可以是红、蓝、绿,但不能是红、红、蓝。但它不像常规的唯一约束与数据库中同类的其他记录进行比较。
如何在 liquibase 中实现它?
您可以对所有 3 列(TopColor
、MiddleColor
和 BottomColor
)使用检查约束以确保它们不是相同的值:
changeSet:
id: ...
author: ...
changes:
- addCheckConstraint:
constraintBody: TopColor <> MiddleColor <> BottomColor
constraintName: someName
tableName: GradientBaloon
validate: true
会翻译成下面的SQL,可以包含在changeSet的sql
部分:
ALTER TABLE GradientBaloon ADD CONSTRAINT TopColor CHECK (TopColor <> MiddleColor <> BottomColor);