これまで Liquibase を使用したことがなく、この問題を解決する方法がわかりません。私が最近参加したプロジェクトは古いプロジェクトのリメイクであるため、古いデータベースに固執する必要があり、そのスキーマはひどく設計されています。データベースは外部キー制約を使用しないため、存在しないエントリを指すエントリがまだ存在します。私の場合、データベースに存在しない銀行に銀行口座を持つ医師です。私のチームがこれまでにこれらの問題に対処した方法は、ID を NULL で上書きすることでした。したがって、基本的に私がやろうとしているのは、銀行が存在しない場合に、すべての銀行口座 ID を NULL に設定することです。このタスクを実行するために作成した SQL コードは次のとおりです。
UPDATE DOCTOR SET FK_BANKID = NULL WHERE FK_BANKID NOT IN (SELECT ID FROM BANK);
その修正を Liquibase チェンジセットに統合するように言われましたが、その方法がわかりません。これは私がこれまでに行ったことです:
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd">
<changeSet id="remove_fk_bankid" author="v7">
<update tableName="DOCTOR">
<column name="FK_BANKID" value="NULL" />
<where>FK_BANKID NOT IN (SELECT ID FROM BANK)</where>
</update>
</changeSet>
</databaseChangeLog>
Liquibase の更新はエラーなしで実行されますが、後でデータベースを見てみると、何も変わっていません。この問題を解決する方法を教えてくれる人はいますか?