Поскольку вы знаете, что меняет потребности вашей "старой схемы", и готовы их реализовать - Liquibase выглядит как удобное решение.
Вы должны написать необходимые changeSets в обновите вашу схему.
Liquibase предлагает много изменений , достаточных для сценариев основы c миграции.
Чтобы добавить новую таблицу, вы можете использовать createTable change :
<changeSet id="foo" author="bar">
<preConditions onFail="MARK_RAN">
<not>
<tableExists tableName="your_table"/>
</not>
</preConditions>
<createTable tableName="your_table">
<!-- your columns here -->
</createTable>
</changeSet>
Для добавления столбца вы можете использовать addColumn change :
<changeSet id="foo2" author="bar">
<preConditions onFail="MARK_RAN">
<not>
<columnExists tableName="your_table" columnName="your_column"/>
</not>
</preConditions>
<addColumn tableName="your_table">
<column name="your_column" type="integer">
<constraints nullable="false"/>
</column>
</addColumn>
</changeSet>
Для обновления данных вы можете использовать update изменить :
<changeSet id="foo3" author="bar">
<preConditions onFail="MARK_RAN">
<columnExists tableName="your_table" columnName="your_column"/>
</preConditions>
<update tableName="your_table">
<column name="your_column" value="123"/>
<where>your_column IS NULL</where>
</update>
</changeSet>
Для базовых c SQL запросов вы можете использовать sql изменить :
<changeSet id="foo4" author="bar">
<preConditions onFail="MARK_RAN">
<sqlCheck expectedResult="1">
<!-- something like -->
SELECT * from your_table where your_column = 100;
</sqlCheck>
</preConditions>
<sql>DELETE FROM your_table WHERE your_column=100</sql>
</changeSet>
И так далее, и так далее. Вы объединяете все наборы изменений в databaseChangeLog , добавляете changeLogs в свое приложение, и вы готовы к go с обновлением "старой схемы"!