データの名寄せの仕方について
久しぶりにBlogを更新しようと思ったので書いてみる。
とある会社で社内システムの開発をしているがそのときに起きた不具合でデータの二重登録が起きてしまった。原因はmodelのveridation不足や、設計が曖昧だったためデータの二重登録が起きてしまった。
しょうがないので、二重登録を急遽回避をしなければならなかった。
その時の方針は
①マスターデータの選定
②既存のデータをCSVに吐き出してバックアップ
③名寄せスクリプトを作成するに当たって、ER図を作成し影響範囲を把握
④ER図からマスターデータの外部キーをピックアップし同じ名前のデータをマスターデータに外部キーを寄せる
⑤名寄せスクリプトを流した前と流した後のデータがどのように変化したかのデータをCSVで出力
⑤の結果より、目視で名寄せが8割ぐらいできていればその名寄せスクリプトは成功だと言えました。
しかしながらここで問題が・・・・
外部キーの名寄せはできたが、重複しているデータにユニークなデータがあるためマスターへのデータを集めたい問題が発生。
データが古かったりするので、複数重複しているデータの中でcreated_atカラムを見て2件以上重複していなかったらそのデータをマスターデータにするという処理をすることにしました。
この処理をすると9割ぐらいデータの名寄せができていました。残りの1割のデータはどうするか?
こればかりはしょうがないです。
人海戦術です。過去の資料を引っ張ってきて本当に正しいデータなのか1件1件見るしかないです。
ということで名寄せをしないといけない状況にならないようにするには
①ユニークなデータにしたい場合は、必ずバリデーションにユニーク制限やDB自体にユニーク制限をかけた方がいい。
②不具合データが起きたことも想定して二重でデータを管理した方がいいかもしれないです。