2008年11月3日月曜日

マイグレーションでDBを戻せる?

マイグレーションでやる前から気になっているのは、戻す場合。
普通、バージョンを戻したりはしない。トラブルがあってこそだ。まあ、それが言い過ぎだとしても、毎回戻したりはしないはずだ。ということは、使われない「戻すコード」を大量に書いてテストしてしまうということになる。しかもRubyコードで手書きするということは、バグがあるということ。つまり、戻らないということ。

もっと賢い方法だとばっかり思ってた。
10日でおぼえる本にはすごいことが書いてある。drop_tableだって。消すのか? これは最初のバージョンだからね。その前は確かにテーブルが無い状態だった。先をめくってみると、002バージョンではちゃんとスキーマを元のもので書き直している。書き直している!? DRYなのか?これって。せっかくなんだから、up間の差分を判断して、戻して欲しいよね。

それと実際にレコードがある程度溜まった状態で変更があった場合、元に戻すということは、その間変更のあったレコードを元に戻す必要があると思う。データベースは、レコード有っての物種だからね。そう考えると、以前のバージョンをテーブル毎保存しておいて、そこへ戻すほうが合理的かつ安心。

つまりマイグレーションで行うバージョン管理とは、スキーマレベルということなのだろうか? それは余りにもお粗末だ。きっとまた、私が大きな勘違いをしているに違いない。

それはそうと、DB側で世代管理機能ってあってもよさそうだけど、一体、ドウナッテルノヨbyミシェル。



0 件のコメント: