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


67

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


ここで何を達成しようとしていますか?人々に変更を警告したり、誰が何をいつ変更したかに関する監査証跡を作成しようとしていますか?完全に何か他のもの?
-ScottCher

@Scott-基本的に他の開発者の監査証跡のように作成できるため、最新の開発スキーマがあり、テストサイトとライブサイトを簡単にチェックして、実行しているスキーマを確認できます。
トビー

1
これは私が投稿したばかりの質問に似てい
ベスホワイトゼル

1
@BitOff-私は同意し、あなたが参照した質問に対する私の答えもここにあると思います。PowerDesignerやERWinなどのツールを使用すると、データベース設計のバージョン管理に役立ちます。データベースが外部でモデル化され、すべての変更がモデルを介して計画されている場合、レビューのためにそれらの変更をより適切に制御および配布できます。
-ScottCher

1
LiquibaseまたはFlywayをご覧ください
a_horse_with_no_name

回答:


44

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

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ステートメントを介してそれを行います(プロジェクトのコードリポジトリにコミットされます)。


1
@David-これはそれ自体でほぼ問題ですが、テーブルがVCSにフィードバックする方法を非常に迅速に説明できますか?手動ダンプだけで?
トビー

@Toby-デプロイにより、スクリプトはSVNに配置され、開発者はSVN revまたはJIRAバグを提供しました-私たち(dbas)はこの表にクイックノートとrev#を挿入しました。しかし、それを結び付けるために、JIRAへのハイパーリンクを持つこのテーブルを指すWebページを作成しました。
デビッドホール

はい。基本的に、OPには逆方向のものがあります。バージョン管理するデプロイメントスクリプトを使用すると、データベースデルタからは動作しません。とにかく、それらは退化した(単純化された)場合にのみ機能します-スキーマを更新するためにマルチステップ変換を行う必要があるかもしれませんが、ツールは後方に生成できません。ただし、展開スクリプトはこれを処理できます。
トムトム

23

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

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

もう1つのSOの質問から、Migrator Dot Netに導かれました。これは、私が十分な空き時間に調査を開始する予定です。それは良い方法のように見えますが、あなたが喜んでやるよりも時間/オーバーヘッドの投資になるかもしれません。


Visual Studioの「データベースエディション」は以前は別個の製品でしたが、現在はTeam Serverを含むエディションに含まれています。個人的には、同期を保つためにRedGateツール(SQL Compare)を好みます。
タングレナ

12

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


8

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

また、この質問には「プロセス優先」の角度があります。これについては、このサイトで後続の質問で(できれば)再訪します。このプロセスの要点は、スキーマをソース管理下に置き、バージョン "x"からバージョン "y"にスキーマの変更をほとんどオンデマンドで適用できるように変更を管理することです。

このトピックへの決定的な答えはこの本のように見える終わるために起こっているので、それはおそらく1を参照して始め価値がある:レッドゲートは最近「と呼ばれる無料の電子ブック出版されたSQL Serverのチームベースの開発にレッドゲートガイド」、およびがありますしながら、議論の余地はたくさんありますが、議論を始めるにはかなり良い場所です、IMO。名前に反して、本書の内容の多くは、SQL ServerだけでなくDBやRedgateだけでなくすべてのツールセットに適用できるほど一般的です。まだこれを見ていなければ、少なくとも一見の価値があります。

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


5

SchemaCrawlerは、すべてのデータベーススキーマオブジェクトを含むテキストファイルを作成するためのツールです。このテキスト出力は、人間が判読できるように設計されているだけでなく、別のサーバーからの類似の出力に対しても差分可能であるように設計されています。

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


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.