スキーマの比較をしよう
スキーマの編集をたくさんの項目に対して行っていると以前の内容とどこが変更されたのかを比較したくなるものです。そこでVSTS-DBにはスキーマの比較という機能が用意されています。スキーマの比較元、比較先にはVSTS-DBで管理しているデータベースプロジェクト、SQL Serverのインスタンスを利用することができ、表1に示す組み合わせが可能です。
比較元 | 比較先(ターゲット) |
データベースプロジェクト | データベースインスタンス |
データベースインスタンス | データベースプロジェクト |
データベースインスタンス | データベースインスタンス |
スキーマの比較には比較結果をターゲットに反映する機能も用意されており、その機能の都合で、上記3種類が用意されていると推測できます。
「データベースプロジェクト→データベースインスタンス」の比較は、データベースプロジェクトで変更管理されている内容を、既存のデータベースに反映したい場合に利用するといいでしょう。
「データベースインスタンス→データベースプロジェクト」の比較は、もともとデータベースプロジェクトの読み込み元となったデータベースインスタンスが別のところで変更されている場合にその変更を取り込むときに利用するといいでしょう。
「データベースインスタンス→データベースインスタンス」の比較は、パッケージ開発しているようなアプリケーションの異なるバージョンで直接的に比較、編集するような場合に利用できるかもしれません。通常、運用環境にあるデータベースにこのような形でアクセスできるということは滅多にないはずですので、いずれもステージング環境(例えば、稼働中アプリケーションの検証用に用意されているバックアップ環境など)でこのような比較を行うことになるだろうということには注意しておいてください。
さて、ではスキーマの比較を試してみましょう。Visual Studioの[データ]メニューから[スキーマの比較]‐[新規スキーマ比較]を選択します。図27のような画面が開くので、ソーススキーマ(比較元)、ターゲットスキーマ(比較先)を選択します。図27の例では、ソーススキーマにデータベースプロジェクトを、ターゲットスキーマにスキーマのインポート元にしたNorthwindデータベースを指定しています。
読み込みが終わるとそれぞれの項目ごとに比較を行った結果が一覧で表示されます。この一覧では図28に示すように等しいか異なるか新規か、などが表示されます。
図28では、[dbo].[Categories]が「異なります」と表示されています。この行を選択すると一覧の下側にどこが異なっているのかがSQL文で表示されます。
図29を確認すると5行目が異なるテキストとして表示されています。よく確認してみるとどうやらサイズが異なっているようです。この表示は構成管理ツールでローカルファイルと構成管理サーバーのファイルの比較を行うときと非常によく似た表示方法です。TFSやVSSでソースの比較をされたことがあれば、なじみやすいのではないでしょうか。
比較を行った結果はそのままターゲットスキーマに反映させることも、ターゲットスキーマを更新するSQL文を生成することもできまず。どちらも Visual Studioの[データ]メニューから[スキーマの比較]‐[更新の書き込み](直接変更を反映する場合)または[エクスポート先]‐[エディタ]または[ファイル](更新を反映させるSQL文を生成する場合)とすることで実施できます。
なお、SQL文を生成すると図31のようなコードが生成されます。
SQLを生成した場合は、何も編集せずに実行すれば直接反映を行った場合と同じになります。例えば、更新をしたい部分だけをピックアップすれば一部分だけ反映させるといったことにも応用が考えられます。
まとめ
今回は既存のDBからスキーマを読み込み、編集から比較するという一番シンプルな部分を順に追ってみてみました。デザイナが貧弱、Oracleに対応していない、SQL Server 2008対応はGDRを別途インストールする必要があるなど、少し不便に感じる部分もあったのではないでしょうか。このあたりは、初期デザインをVisioやSSMSで行ってしまい、ある程度固まってきたらVSTS-DBに移して変更管理を活用していくといったことで、VSTS-DBのいいところだけをうまく引き出していくことができると考えています。
次回は、ストアドプロシージャの開発に焦点を当て、主にストアドプロシージャの単体テストを行っていくための機能を紹介する予定です。