href="{{i}}"
我已经进行了这样的迁移来创建表,现在我已经进行了更改并且需要进行其他迁移。在表中,名称字段是唯一的,我应该摆脱它,也就是说,名称不应该唯一,并且我需要对fam施加限制。一个家族不应分配给两个具有相同名称的角色。但是具有不同名称的角色可以包含相同的家族。预先感谢
答案 0 :(得分:0)
如果要向现有架构中添加更改,则应保持现有更改不变,并编写新的changeSet。
所以为了执行要求
名称字段是唯一的,我应该摆脱它
您本可以使用<dropUniqueConstraint>
更改,但是它需要一个constraintName
属性。但是在创建名称时,您没有提供uniqueConstraintName
作为其唯一约束,这使实现变得棘手。最好给您约束和索引名称。
因此,您可以执行以下操作:
changeSets可能看起来像这样:
<changeSet id="0.1.1.1" author="Bob">
<preConditions onFail="MARK_RAN">
<tableExists tableName="roles"/>
<not>
<columnExists tableName="roles" columnName="non_unique_name"/>
</not>
</preConditions>
<comment>create a new column, e.g. non_unique_name</comment>
<addColumn tableName="roles">
<column name="non_unique_name" type="varchar(1024)">
<constraints nullable="false"/>
</column>
</addColumn>
</changeSet>
<changeSet id="0.1.1.2" author="Bob">
<preConditions onFail="MARK_RAN">
<tableExists tableName="roles"/>
<columnExists tableName="roles" columnName="non_unique_name"/>
<columnExists tableName="roles" columnName="name"/>
</preConditions>
<comment>copy all the data from name to non_unique_name</comment>
<update tableName="roles">
<column name="non_unique_name" valueComputed="name"/>
</update>
</changeSet>
<changeSet id="0.1.1.3" author="Bob">
<preConditions onFail="MARK_RAN">
<tableExists tableName="roles"/>
<columnExists tableName="roles" columnName="name"/>
</preConditions>
<comment>drop name column</comment>
<dropColumn tableName="roles" columnName="name"/>
</changeSet>
<changeSet id="0.1.1.4" author="Bob">
<preConditions onFail="MARK_RAN">
<tableExists tableName="roles"/>
<columnExists tableName="roles" columnName="non_unique_name"/>
</preConditions>
<comment>rename non_unique_name column to name</comment>
<renameColumn tableName="roles" oldColumnName="non_unique_name" newColumnName="name"
columnDataType="varchar(1024)"/>
</changeSet>
为了执行该要求:
不应将一个经销商分配给两个具有相同名称的角色。但 名称不同的角色可以包含相同的经销商。
您可以使用<addUniqueConstraint>
更改,通过它可以添加复合唯一约束。 changeSet可能看起来像这样:
<changeSet id="0.1.1.5" author="Bob">
<preConditions onFail="MARK_RAN">
<tableExists tableName="roles"/>
<columnExists tableName="roles" columnName="dealer"/>
<columnExists tableName="roles" columnName="name"/>
</preConditions>
<comment>add unique constraint for roles.dealer and roles.name</comment>
<addUniqueConstraint tableName="roles" columnNames="dealer, name"
constraintName="roles_dealer_name_unique" />
</changeSet>