一条记录中选定字段中唯一值的 Liquibase 约束

Liquibase constraint for unique value in selected fields in one record

我需要创建某种约束来禁止在一条记录中插入相同的值。例如,有一个实体 GradientBaloon,其字段为 TopColorMiddleColorBottomColor这些字段的 和 none 可以与其他字段具有相同的值。渐变可以是红、蓝、绿,但不能是红、红、蓝。但它不像常规的唯一约束与数据库中同类的其他记录进行比较。

如何在 liquibase 中实现它?

您可以对所有 3 列(TopColorMiddleColorBottomColor)使用检查约束以确保它们不是相同的值:

changeSet:  
  id:  ...
  author:  ...  
  changes:  
  -  addCheckConstraint:  
      constraintBody:  TopColor <> MiddleColor <> BottomColor    
      constraintName:  someName
      tableName:  GradientBaloon 
      validate:  true

会翻译成下面的SQL,可以包含在changeSetsql部分:

ALTER TABLE GradientBaloon ADD CONSTRAINT TopColor CHECK (TopColor <> MiddleColor <> BottomColor);