大規模なデータベースのチーム開発の開始

データベース スキーマへの変更を管理するには、まずデータベース プロジェクトを作成し、次に管理対象のデータベースからオブジェクトと設定をインポートします。 非常に大規模なデータベースの変更を管理する場合は、オブジェクトをいくつかのデータベース プロジェクトに分割することもできます。 この方法により、データベースのさまざまなセクションで、どのチームまたは開発者がコードを追加、変更、または削除できるようにするかを制御できます。 2 つの方法で、データベースを小さく分けることができます。

  • 複合プロジェクト - データベース プロジェクト参照でリンクされた 2 つ以上のデータベース プロジェクトにデータベースのセクションを定義します。 参照を含むプロジェクトを配置するときは、参照先のプロジェクトもすべて配置します。 複合プロジェクトにオブジェクト間の循環参照を含めることはできません。

  • 部分プロジェクト - データベース プロジェクトのセクションを .files ファイル形式でエクスポートできます。 2 つ目のデータベース プロジェクトを作成し、これに部分プロジェクト (.files ファイル) を含めます。 これらのファイルは、読み取り専用の形式で新しいプロジェクトに追加されます。 そのため、開発者が 2 つ目のプロジェクトで作業する場合、その読み取り専用オブジェクトを参照する追加のオブジェクトを作成できますが、変更はできません。 2 つ目のプロジェクトをビルドおよび配置すると、読み取り専用のセクションを含めて、データベースの完全コピーがビルドされます。 部分プロジェクトには循環参照を含めることができます。

後で詳しく説明するように、それぞれの方法には制限があります。

データベース プロジェクトの種類の指定

データベース プロジェクトの作成時には、SQL Server のバージョンに対応するプロジェクトの種類を指定します。 たとえば、管理対象のデータベースが SQL Server 2005 を基にしている場合は、[SQL Server 2005 データベース プロジェクト] または [SQL Server 2005 ウィザード] を指定します。 ウィザードを使用する場合は、プロジェクトの作成だけでなく、一部のビルドや配置設定の構成およびデータベース オブジェクトや設定のインポートを同時に行うことができます。

データベース オブジェクトと設定のインポート

プロジェクトの作成が完了したら、データベース インスタンスまたはスクリプトからオブジェクトと設定をインポートできます。 スクリプトからデータベースをインポートするときには、そのオブジェクト定義が検証され、解析できないステートメントは ScriptsIgnoredOnImport.sql ファイルに格納されます。 既に存在しないオブジェクトを参照するオブジェクト定義をインポートする場合は、プロジェクトをビルドおよび配置する前に、これらのエラーを解決しておく必要があります。 たとえば、既に存在しないテーブルを参照するストアド プロシージャをインポートする場合などです。 エラーを解決するには、そのストアド プロシージャを削除します。

大規模なスキーマをインポートする場合は、そのようなエラーの解決に時間がかかることがあります。 ただし、チーム メンバが Visual Studio Team System Database Edition でスキーマを更新するときに、この種類のエラーを新たに追加することはできません。 チーム メンバがオブジェクト定義を変更して保存する際には、変更がすべて検証されます。これにより、エラーを直ちに修正することで、ライブ データベースにこのようなエラーが配置される状況を回避できます。 オブジェクト定義内の警告の解決が完了したら、データベース コードを分析して設計、名前付け、およびパフォーマンスに関する問題を検出することも考慮する必要があります。 詳細については、「スタティック分析によるデータベース コードの改善」を参照してください。

一般的なタスク

次の表に、このシナリオをサポートする一般的なタスクの説明と、それらのタスクを正常に完了する方法の詳細へのリンクを示します。

一般的なタスク

関連する参照先

データベース プロジェクト、および部分プロジェクトと複合プロジェクトの制限の詳細を理解する : データベース プロジェクトを使用してスキーマの変更を管理する方法の基本的な概念を習得できます。

実習を行う : 入門チュートリアルに従って作業すると、部分プロジェクトまたは複合プロジェクトを使用して、データベース プロジェクトをパーティション分割する方法を習得できます。

既存のデータベース スキーマをバージョン管理する : データベース プロジェクト ウィザードを使用すると、プロジェクトを作成し、プロジェクト設定を構成して、スキーマをインポートできます。 また、後でスキーマをインポートする場合や、スキーマのインポート元のデータベースへのアクセス許可がない場合は、空のプロジェクトを作成することもできます。 スキーマのインポートが完了したら、プロジェクトをバージョン管理に追加できます。

データベース プロジェクトをパーティションに分割してオブジェクト定義を共有する : 1 つのデータベース プロジェクトからオブジェクト定義をエクスポートして、別のプロジェクトで再利用できます。 部分プロジェクト定義のインポート先プロジェクトにアクセスできる他のチーム メンバも、インポートされたオブジェクトは変更できないので、 データベース コードのサブセットに対する変更を制御することが可能です。

参照を追加して複合プロジェクトを作成する : データベース プロジェクトへの参照を追加して、複合プロジェクトを作成します。ただし、サーバー変数およびデータベース変数の値は指定しません。 プロジェクトを配置するときは、参照先のプロジェクトもすべて配置します。

部分プロジェクトの使用と制限

次の図は、部分プロジェクトを使用する標準的なシナリオを示しています。

Database Edition での部分プロジェクトの使用
Database Edition の部分プロジェクト

この例では、プロジェクトに 2 つのオブジェクト セットが含まれています。 別の開発者またはチームがプロジェクトにストアド プロシージャを追加できるようにして、その際に他のオブジェクトを誤って変更しないようにする必要があります。 部分プロジェクトを使用してこの目標を達成するには、次の手順を実行する必要があります。

  1. オブジェクトのグループをスキーマまたはオブジェクトの種類別に A.files と B.files にエクスポートします。

  2. 他の開発者またはチームがストアド プロシージャ (sprocs と呼ばれる場合もあります) を作成するもう 1 つのデータベース プロジェクトを作成します。

  3. 作成したデータベース プロジェクトに、エクスポートした部分プロジェクトの A.files および B.files をインポートします。

この時点で、他の開発者またはチームは、オブジェクトを追加し、プロジェクトをビルドおよび配置して、変更をテストできます。

データベースに長い名前のオブジェクトが含まれている場合や、データベース プロジェクトを作成したパスが長い場合、部分プロジェクト (.files ファイル) を別のデータベース プロジェクトにインポートできないことがあります。 次の推奨事項に従うと、これらの問題を回避できます。

  • 短いパス名のフォルダにデータベース プロジェクトを作成します。 たとえば、"C:\Documents and Settings\UserName\My Documents\Visual Studio 2008\Projects" より "D:\MyProjects" の方が適しています。

  • データベース オブジェクトを非常に長い名前にすることは避けます。 外部キーは、長い名前を持つ最も一般的な種類のオブジェクトです。 外部キーが "FK_ReferencingTable_ReferencedTable_ReferencedColumn1_ReferencedColumn2" という名前の場合、そのキーの定義を含む部分プロジェクトをインポートするとエラーが発生することがあります。

複合プロジェクトの使用と制限

次の図は、複合プロジェクトを使用する標準的なシナリオを示しています。

Database Edition での複合プロジェクトの使用
Database Edition の複合プロジェクト

この例では、スキーマの定義を含むデータベース プロジェクトを作成できます。 その後、テーブルとビューの定義を含むもう 1 つのデータベース プロジェクトを作成し、さらに、ストアド プロシージャの定義を含むもう 1 つのデータベース プロジェクトを作成します。 3 番目のプロジェクト (データベース プロジェクト C) には他の 2 つのデータベース プロジェクトへの参照があります。 3 番目のプロジェクトをビルドおよび配置するときに、他のプロジェクトも自動的に配置されます。

複合プロジェクトを使用する場合は、各プロジェクトを個別にビルドおよび配置できる必要があります。 複合プロジェクトにプロジェクト間の循環依存関係を含めることはできません。 複合プロジェクトを使用して、データベースをオブジェクトの種類別にパーティション分割できます。 たとえば、スキーマを 1 つのプロジェクトに入れ、テーブルとビューをもう 1 つのプロジェクトに入れ、ストアド プロシージャをさらに別のプロジェクトに入れることができます。

関連するシナリオ

  • データベースのチーム開発の開始
    データベース プロジェクトにデータベース スキーマのオフライン表現を作成し、そのプロジェクトをバージョン管理に追加する方法について説明します。

  • 他のデータベースを参照するデータベースのチーム開発の開始
    データベース スキーマのオフライン表現を作成し、他のデータベースへの参照を定義し、配置先の環境の変数に値を指定して、プロジェクトをバージョン管理に追加する方法について説明します。

  • SQLCLR オブジェクトを参照するデータベースのチーム開発の開始
    データベース スキーマのオフライン表現を作成し、SQL 共通言語ランタイム (CLR: Common Language Runtime) オブジェクトを含むアセンブリへの参照を定義し、それらの SQLCLR オブジェクトを参照するデータベース オブジェクトを定義して、プロジェクトをバージョン管理に追加する方法について説明します。

  • XML スキーマ コレクションを使用するデータベースのチーム開発の開始
    データベース スキーマのオフライン表現を作成し、XSD ファイルへの参照を定義し、そのファイルを使用する XML スキーマ コレクションを定義し、その XML スキーマ コレクションを使用する列を定義して、プロジェクトをバージョン管理に追加する方法について説明します。

  • 共有サーバー オブジェクトを参照するデータベースのチーム開発の開始
    データベース スキーマのオフライン表現を作成し、共有サーバー プロジェクトへの参照を定義し、サーバー プロジェクトで定義されているオブジェクトへの参照を追加して、データベース プロジェクトをバージョン管理に追加する方法について説明します。

  • シナリオ : データベース サーバー上のオブジェクトのチーム開発の開始
    データベース サーバー上のオブジェクトのオフライン表現を作成し、サーバー プロジェクトをバージョン管理に追加する方法について説明します。

参照

概念

Database Edition の用語の概要