継続インテグレーションとデータベースのバージョン管理

翻訳記事も出た事だし,Allen流データベース・バージョニング方法についてちょっと触れとく。
#Allenさんのブログへのリンクはこちらにまとめといた。
#→2008-02-20 - marsのメモ


Allenさんが言ってるDBバージョニング方法とは,

  1. ベースラインとするSQLスクリプトDDL文)を用意する。
    • initial-install.sqlって名前にしとく。
  2. 変更があるたび,その差分を定義したスクリプトを用意する。
    • "Schame Cheange Log"ってことで,"sc.MajorReleaseNumber.MinorReleaseNumber.PointReleaseNumber.sql"てな名前をつける。
    • 例) sc.05.00.0001.sql
  3. どのスクリプトまで適用済みなのか分かるようにSchemaChangeLogテーブルを用意して,そこにログを残す。
    • ついでに,スクリプトの適用と状態確認ができるようなツールを作っておけ。

てなのが主な論調(たぶん)。なんかRailsのmigrationみたいだね。


んで,どっかに「差分ばっかじゃ全体像を把握できないから,常に全体を定義したスクリプトを用意して,差分はツールにまかせたらどうよ?」みたいなコメントがついたんだけど,確かに一理あるなと思ったよ。
#「ツールが重くて使いもんにならん」って反論あったけど。


ぱっと思いつく限りだと,ここらへんの課題をクリアしとかんと実行には移れんだろう。

  • どこをベースラインとするか。
    • 保守フェースも視野に入れると,ファーストリリースがベースラインだよね。
    • むろん,開発中もどっかでベースライン作って運用しててもいいだろうけど。
  • 差分作る単位をどうするか。
    • 闇雲に変更スクリプト書いてたら,それだけで嫌気がさしそうだわな。ありがちなところで,ブランチ単位が妥当かのう。
  • どうやって変更スクリプト作る(作らせる)?
    • 優秀なDBAが居なくなっても維持できるルールやツールがないと困る。
  • 最新のER図とかどっから見りゃいいんダロ?
    • やっぱ最新のDBマウントしてリバースですか?
    • 差分とは別に,保険として全体のスナップショットも残しとくんだろうなぁ...

課題もいろいろだけれど,この程度のことで済むくらいDBのバージョニングも現実味を帯びてきてるんだなぁと思うべきか。
興味のあるテーマではあるので,機会があったら挑戦してみよう。
LiquiBaseとかも使ってみたいし。:-)