データベース プロジェクトとサーバー プロジェクトの概要
Visual Studio Premium を使用してデータベース プロジェクトやサーバー プロジェクトを作成し、それをバージョン管理することによって、データベース開発をより効率的に管理できます。 このオフライン表現には、そのデータベース (またはサーバー) の個別のインスタンスの作成や既存のインスタンスの更新に使用できるオブジェクト定義、設定、および配置スクリプトが含まれます。
組織の要件に基づいて、プロジェクトの一部を共有することや、複合プロジェクトを作成することができます。 詳細については、このトピックの後半にある「プロジェクトの一部の共有」、または「データベース プロジェクトでの参照の使用」の「参照を使用した、複合プロジェクトの作成」を参照してください。
使用できるプロジェクトの種類
Visual Studio 2010 Premium を使用すると、データベース プロジェクト、サーバー プロジェクト、およびデータ層アプリケーション コンポーネント (DAC) プロジェクトを作成できます。
データ層アプリケーション コンポーネント プロジェクト
DAC は新しい概念です。 DAC は SQL Server 2008 R2 で導入され、SQL Server データベースの定義と、クライアント サーバー アプリケーションや 3 階層アプリケーションが使用する、サポートされるインスタンス オブジェクトが含まれます。 DAC には、テーブルやビューなどのデータベース オブジェクトと、ログインなどのインスタンス エンティティが含まれています。 Visual Studio を使用して DAC プロジェクトを作成し、DAC パッケージ ファイルをビルドし、その DAC パッケージ ファイルをデータベース管理者に送って、SQL Server データベース エンジンのインスタンスに配置してもらうことができます。 DAC プロジェクトがサポートする機能の一覧については、「Features Supported in Data-tier Applications (データ層アプリケーションでサポートされる機能)」を参照してください。データベース プロジェクト
データベース プロジェクトには、データベースのすべてのオブジェクトの定義が含まれます。 さらに、データベース設定、ビルド設定、および配置設定が含まれます。サーバー プロジェクト
サーバー プロジェクトには、サーバー上、またはサーバー上のマスター データベースにあるオブジェクトの定義が含まれます。 さらに、サーバー設定、ビルド設定、および配置設定が含まれます。
プロジェクト構造
ソリューション エクスプローラーには、プロジェクトがファイル別に表示されます。 ソリューション エクスプローラーの各項目は、保存されているファイルまたはフォルダーに対応しています。 一方、スキーマ ビューには、データベースのオブジェクトが個別のファイルとして定義されているかどうか識別できるように、オブジェクト別またはスキーマ別に表示されます。
データベース プロジェクトまたはサーバー プロジェクトには、次のオブジェクトの種類が含まれます。
プロパティ ファイル
データベース プロジェクトまたはサーバー プロジェクトには、Properties フォルダーにプロパティ値を含むファイルが含まれます。 その値を変更することで、プロジェクトの配置方法を制御できます。 たとえば、データベース設定、サーバー設定、SQLCMD 変数、およびデータベースのアクセス許可を指定できます。 詳細については、「データベース プロジェクトおよびサーバー プロジェクト内のプロパティ ファイル」を参照してください。データ生成計画
データ生成計画には、配置または更新するデータベースに使用できる、現実的で代表的なテスト データを生成する方法についての情報も含まれます。 詳細については、「データ ジェネレーターを使用したデータベースのテスト データの生成」を参照してください。スキーマ比較
スキーマ比較には、データベース プロジェクトと他のスキーマとの詳細な比較に関する情報が含まれます。 .scmp ファイルを開き直し、比較を更新することで、プロジェクトとそのスキーマの比較を再実行できます。 詳細については、「データベース スキーマの比較と同期」を参照してください。スキーマ オブジェクト
スキーマ オブジェクトは、プロジェクト フォルダーに格納されている .sql ファイルのコレクションで定義されます。 大部分のオブジェクトが、個別のファイルで定義されます。 例外としては、テーブル内の列や、ストアド プロシージャまたは関数のパラメーターが挙げられます。 列はテーブルの定義に格納され、パラメーターはストアド プロシージャまたは関数の定義に格納されます。 詳細については、「データベース オブジェクトおよびサーバー オブジェクトの作成と変更」を参照してください。Scripts
プロジェクトには、配置前スクリプト、配置後スクリプト、およびデータベースやサーバーの管理に使用できる任意のスクリプトが含まれます。 詳細については、「データベース スクリプトの作成および変更」を参照してください。
オブジェクトと設定のインポート
プロジェクトを作成したら、データベースのインスタンスまたはスクリプトから、オブジェクトと設定をインポートできます。 データベースをインポートするときには、そのオブジェクト定義が検証され、解析できないステートメントは ScriptsIgnoredOnImport.sql ファイルに格納されます。 既に存在しないオブジェクトを参照するオブジェクト定義をインポートした場合は、プロジェクトをビルドおよび配置する前に、そのエラーを解決しておく必要があります。 たとえば、既に存在しないテーブルを参照するストアド プロシージャをインポートした場合などです。 エラーを解決するには、そのストアド プロシージャを削除します。
大規模なスキーマをインポートした後は、そのようなエラーの解決に時間がかかることがあります。 ただし、チーム メンバーが Visual Studio Premium でスキーマを更新するときに、気付かないうちにこのようなエラーを追加する可能性はありません。 チーム メンバーがオブジェクト定義を変更して保存する際には、変更がすべて検証されます。そのため、チーム メンバーはエラーを直ちに修正し、ライブ データベースにこのようなエラーが配置されるのを防ぐことができます。
オブジェクト定義の警告を解決したら、データベース コードを分析し、設計、名前付け、およびパフォーマンスに関する問題を検出することも検討する必要があります。 詳細については、「データベース コードの分析によるコードの品質の向上」を参照してください。
プロジェクトの一部の共有
複数のプロジェクトのファイルを再使用する場合、部分プロジェクトとしてプロジェクトの一部をエクスポートできます。 このアクションで、.files ファイルが作成されます。このファイルには他のプロジェクトを 1 つまたは複数含めることができます。 たとえば、データベースの監査に使用する共通のストアド プロシージャが複数あるとします。 これらのストアド プロシージャは 1 つのプロジェクトで定義し、エクスポートし、他のプロジェクトに含めることができます。 この方法を利用すると、複数のプロジェクトで同じコードを保守する必要がなくなります。 詳細については、「方法: 部分データベース プロジェクトをインポートおよびエクスポートする」を参照してください。
セキュリティの考慮事項
データベース プロジェクトおよび関連する .dbschema ファイルには、データベース資産に関する情報が含まれます。 ソース コードへのアクセスを制限する場合と同様に、データベース プロジェクトと .dbschema ファイルへのアクセスを制限する必要があります。
データベース プロジェクトと .dbschema ファイルへのアクセスを制御するには、次の方法があります。
プロジェクトのバージョン管理および適切なファイル システムのアクセス許可を使用する
データベース プロジェクトへのアクセス権は、アクセスが必要な開発者にのみ付与します。 さらに、データベース プロジェクト ファイルまたは .dbschema ファイルを含む任意のファイル共有に対するアクセス許可を制限し、認証されていない個人によるアクセスを回避できます。部分プロジェクトを使用したデータベース プロジェクトの分割
複数のプロジェクトにあるデータベース オブジェクトを分割し、バージョン管理のアクセス許可を使用して、そのプロジェクトの表示または変更を実行できるユーザーを制御できます。 詳細については、「大規模なデータベースのチーム開発の開始」を参照してください。プロジェクトの本体が空の .dbschema ファイルを作成する
実装を含まないストアド プロシージャのコピーを作成し、そのプロシージャを呼び出す必要はあっても実装を表示する必要はない開発者と、そのコピーの .dbschema ファイルを共有できます。 .dbschema ファイルの参照方法の詳細については、「データベース プロジェクトでの参照の使用」を参照してください。
関連するシナリオ
データベースのチーム開発の開始
このオブジェクトと設定のオフライン表現を作成し、その表現をバージョン管理に含めることで、データベースに対する変更を管理できます。他のデータベースを参照するデータベースのチーム開発の開始
このオブジェクトと設定のオフライン表現を作成し、その表現をバージョン管理に含めることで、データベースに対する変更を管理できます。 この表現で、さまざまな対象環境への配置をサポートするデータベース間参照を定義します。SQLCLR オブジェクトを参照するデータベースのチーム開発の開始
このオブジェクトと設定のオフライン表現を作成し、その表現をバージョン管理に含めることで、データベースに対する変更を管理できます。 この表現で、SQLCLR アセンブリに対する参照を追加し、そのアセンブリに定義されているオブジェクトを使用します。共有サーバー オブジェクトを参照するデータベースのチーム開発の開始
このオブジェクトと設定のオフライン表現を作成し、その表現をバージョン管理に含めることで、データベースに対する変更を管理できます。 この表現で、ログインやキーなどのサーバー オブジェクトの定義を含む共有のサーバー プロジェクトに対する参照を追加します。大規模なデータベースのチーム開発の開始
オブジェクトを複数のプロジェクトに分離することで、大規模なデータベースに対する変更を管理できます。XML スキーマ コレクションを使用するデータベースのチーム開発の開始
型指定された XML 列に 1 つまたは複数の XML スキーマ コレクションを使用するデータベースに対する変更を管理できます。
参照
処理手順
チュートリアル : バージョン管理されたデータベースの新規作成と配置
チュートリアル: 既存のデータベース スキーマのバージョン管理