web-dev-qa-db-ja.com

グループはどのようにデータベーススキーマの変更を追跡できますか?

チームの人々がデータベーススキーマの変更を追跡するのに役立つバージョン管理方法論はどれですか。

68
Toby

ほんの数分前に私はこれをチェックしていました: データベースを含むすべてのプロジェクトに存在する必要があるテーブル 、実際に実行するのに十分簡単なようです、チェックしてください:

これはschema_version(またはマイグレーション、または自分に適したもの)と呼ばれ、その目的はデータベースの構造またはデータの変更を追跡することです。可能な構造(MySQLの例)は次のとおりです。

create table schema_version (
     `when` timestamp not null default CURRENT_TIMESTAMP,
     `key` varchar(256) not null,
     `extra` varchar(256),
     primary key (`key`)
) ENGINE=InnoDB;

schema_version(keyextra)の値に挿入します( '001'、 'schema version');

このテーブルをプロジェクトの最初から追加するか、最初のバージョンをステージングサーバーまたは本番サーバーにデプロイした直後に追加するかは、あなた次第です。

SQLスクリプトを実行してデータベース構造を変更したり、データ移行を実行する必要がある場合は、そのテーブルにも行を追加する必要があります。そして、そのスクリプトの最初または最後にあるinsertステートメントを介してそれを行います(これは、プロジェクトのコードリポジトリにコミットされています)。

45
eiefai

最善の方法は、 ビルドプロセスの一部として生成されたデータベース を使用することです。すべてのスクリプトを残りのコードと共にソース管理に保持し、すべての人がそれぞれの環境に責任を負います。

それに失敗すると、RedGateには ソース管理をSSMSに統合するツールSQL Compare があり、MS SQL Serverスキーマの比較/同期に役立ちます。 Visual Studio Database Editionには 組み込みのスキーマ比較ツール もあります。

別の SOの質問 私を Migrator Dot Net に導きます。これは、私の自由な時間の間に調査を開始します。それは良い方法のように見えますが、それはあなたが行うことをいとわないよりも多くの時間/オーバーヘッドの投資かもしれません。

23
Larry Smithmier

eiefaiはすでに言及しました データベースを持つすべてのプロジェクトに存在する必要があるテーブル 。これは素晴らしいブログ投稿ですが、IMOはデータベースのリビジョン管理のための実用的なソリューションへの道の一部に過ぎません。現実の世界でこの質問に「答える」には、VCSとデータベースに関する他の情報を考慮する必要があると思います。

12
TML

この質問に取り組むには、いくつかの異なる角度があると思います。 「ツールファースト」の角度は、プラットフォームと個人の好みによって変わると思います。適例:私はMS Visual Studioでデータベースプロジェクトを使用していますが、これがMySQLの優れたソリューションであるかどうかはわかりません。 Redgate、Erwin、Embarcaderoなどのお気に入りのツールでかなり売られている人もいます。

この質問には「プロセスファースト」の角度もあります。この質問は、(できれば)このサイトで再検討されます。このプロセスの要は、スキーマをソース管理下に置き、変更を管理することで、バージョン「x」からバージョン「y」へのスキーマの変更をほぼオンデマンドで適用できるようにします。

このトピックへの決定的な答えは結局本のように見えることになるので、おそらくそれを参照することから始める価値があります:Redgateは最近、「 The Red Gate Guide to SQL Server Team- based Development "、そして議論の余地はたくさんありますが、IMOは議論を始めるのにかなり良い場所です。名前に反して、この本の内容の多くは、(SQL Serverだけでなく)DBや(Redgateだけでなく)ツールセットにも適用できるほど一般的です。これをまだ見ていない場合は、少なくとも一見の価値があります。

最後に、 stackoverflow からの「レガシー回答」にリンクする価値があります。

8
D. Lambert

SchemaCrawler は、すべてのデータベーススキーマオブジェクトを含むテキストファイルを作成するためのツールです。私はこのテキスト出力を人間が読めるように、また別のサーバーからの同様の出力と比較できるように設計しました。

実際、私が発見したのは、データベーススキーマのテキストファイルを出力することは、ビルドの一部として実行すると便利であることです。このようにして、テキストファイルをソースコード管理システムにチェックインし、スキーマが時間とともにどのように進化したかについてのバージョン履歴を取得できます。 SchemaCrawlerは、これもコマンドラインから自動化するように設計されています。

5
Sualeh Fatehi