2011-08-03 18 views
2

私はデータベース(現在はMySQL 4)を使ってデータを保存しているアプリケーションを書いています。データベーススキーマを最新の状態に保つ

私は後でデータを追加するために、更新の形でこれを変更する予定です。アプリケーションをアップデートするのは簡単ですが、基本的に新しいものでプログラムファイルを上書きすることになります。しかし、データベーススキーマを更新するにはどうすればよいですか?

データベースがリモートであり、アプリケーションが複数の場所に存在する可能性があるため、インストーラーにALTERステートメントとCREATEステートメントをダンプするだけで、変更が複数回発生することになります。アプリケーションのコピーを移行期間に更新し、スキーマの更新を自動的に行うことができます。

スタートアップ時にスキーマを調べて不足しているテーブルや列を探し、必要に応じて追加することを検討しましたが、これはきれいな解決策ではありません。私はまた、データベースに "スキーマバージョン"のようなものを置くことを検討しましたが、どちらかといえば、 "バージョン"列のある単一の行テーブルの不足を防ぐ方法はありません。

答えて

5

Liquibaseをお勧めします。それは本当にうまくいく - 私はそれを使用して非常に感銘を受けました。

本質的に、それはデータベース上で実行されるステートメントの独自のログを保持し、実行/必要がない場合にのみ実行します。これはXMLに基づいており、オプションの実行前および実行後のステートメントと条件を使用できます。 XMLファイルをソースコントロールにチェックインし、ビルドツールから呼び出します。プロダクションリリースの運転にも適しています。

それは魔法です。

+0

私はそれをもう一度することができます。下の私の答えを見てください。 – Caps

0

提案したのと同じように、データベーススキーマの現在のバージョンを保存するテーブルを追加します。次に、最後のスキーマ更新と新しいリリースの間で変更を適用し、それに応じて新しいバージョン番号を設定するだけです。私は生産データベースを約300回更新するためにこれをやっています。

5

データベースをバージョン管理するために独自のシステムをローリングするのではなく、それを管理する既存のフレームワークを検討する価値があります。

私はliquibaseを使用し、mavenプラグインを使用して自分のビルドに統合しました。チェックアウトする価値がある!

+0

+1 Liquibase roolz – Bohemian

+0

xmlにアレルギーがなければ、liquibaseはこれには最適です:P –

+0

実際には、私は*アレルギー性であるが、それでも価値がある – Bohemian

関連する問題