🐬
DBに誤った名前でカラムを作ってしまった...という時のリファクタの仕方
概要
いくつかの現場で、誤った名前のカラムが放置されている状況を何度か見たことがあるので、対処法をまとめておこうと思います。
※DBはMySQLを想定しています
対処法二選
サンプルの状況としては下記です。
「delete_flagという名前のカラムが正しいが、誤字でdelete_falgになっている...」
1. 一発でカラム名を変更
- 必要であればサービスを停止
- 正しい名前のカラム(以下、正カラム)にカラム名を変更
alter table sample_table change delete_falg delete_flag tinyint(1);
- アプリケーション側で誤った名前のカラム(以下、誤カラム)ではなく、正カラムを参照するように修正
- サービスを再開
こちらは一番シンプルです。
ただ、一発でやるのは怖い場合もあるでしょう、その場合は次の対象方で対応しましょう。
2. 段階を踏んで対応する
- 正カラムを新しく追加
- 誤カラムのデータを正カラムにコピーする
UPDATE sample_table SET delete_flag = delete_falg;
- 誤カラムのupdate, insertなどに対してDBのトリガーを設定して、更新などがあっても誤カラムと正カラムが常に同じデータになるようにする
- アプリケーション側で誤カラムではなく、正カラムを参照するように修正
- 誤カラムとトリガーを削除
上記でリファクタリングは完了です。
サービスを停止せず、カラムの名の変更ができました。
まとめ
放置をしていると、DBの負債はどんどん積まれていってしまいます。
(DBをいじるのはいつだって恐いんですけど)早めにリファクタリングをして綺麗にしてあげましょう。
参照
Discussion