データベースの進化的設計

今までデータベースの進化的設計って現実的にどうなのよ。とか思ってたんです。というのも、データベースの変更はプログラムソースの変更に比べて、時間がかかるから、アジャイルなリズムが持てないんじゃないって。

だから、今までデータベースは全体をデザインしてプログラム開発を開始して、開発中の修正はデザインミスってのが多かったんだと思う。

データベースの進化的設計を実現するには、そういう従来の開発をするよりも、データベースの進化的設計をしていった方が開発が楽(手抜きではなく)じゃなきゃいけない。そうじゃなかったら、従来の開発の方がいいもん。従来の開発方法でも多少自動化とかで楽になるじゃんとかそういう気持ちもある。

現在の課題

僕らは、多少の自動化をしていて、開発を廻しているけど、やっていて面倒だったりすることが出てくる。「効率悪い?!」とか思っちゃう時が出てくる。それは、下みたいな点だ。

  1. データベースが大きすぎて時間がかかる。500テーブル位あってテーブルレイアウトが変更になった時にデータを流し直すような感じで考えても、時間がかかりすぎる。
  2. 外部キー制約やユニーク制約が500テーブル位あると、把握しきれない。sqlでinsertを動かして初めて、間違いに気がつく。
  3. Eclipseプロジェクトが現在30個くらいあるけど)それぞれ、最新のテーブル定義で行っているようにするのは、正直、無理。

あるべき姿

こんな機能があったらデータベースの変更の効率が上がるんじゃないかと思う点を下に挙げてみる

  1. データベースの特定のテーブルのみ反映する。
  2. テストデータをスキーマの定義によって順番づけてinsertする。
  3. データベースにデータを入れる前にテストデータの制約違反に気がつける。
  4. データベース定義をバージョン管理する。各Eclipseプロジェクトで指定のバージョンのデータベースを設計を取り出して、テストしたい。

そんな時「、データベースもアジャイル開発に対応したい!」を読んで、何かを越えるのではないかと魅力を感じました。