チュートリアル: 別のデータベースを参照するデータベースを作成して配置する
このチュートリアルでは、別のデータベースを参照するデータベースのデータベース プロジェクトを作成します。 プロジェクトが参照するデータベースは、Visual Studio Premium を使用して管理することもできますが、別のソリューションになります。 この方法では、各開発者が異なるデータベースを管理する場合、または開発者が参照先のデータベースを配置できない場合の一般的なシナリオをエミュレートします。
このチュートリアルでは、次の作業について説明します。
データベース プロジェクトを作成する方法
別のデータベース プロジェクトによって作成された .dbschema ファイルを参照する方法
参照するデータベース プロジェクトの変数とその値を定義する方法
データベース プロジェクトを分離開発環境に配置する方法
必須コンポーネント
Visual Studio をインストールしておく必要があります。 「チュートリアル : バージョン管理されたデータベースの新規作成と配置」を完了し、作成したデータベースを分離開発環境に配置しておくことも必要です。 プロジェクトをバージョン管理に追加するには、Visual Studio Team Foundation Server などのバージョン管理ソフトウェアがインストールされている必要があります。
データベース プロジェクトを作成するには
[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
[新しいプロジェクト] ダイアログ ボックスが表示されます。
[インストールされたテンプレート] で、[データベース] ノードを展開し、[SQL Server] をクリックします。
注意
Visual Studio Professional を使用している場合は、代わりに [インストールされたテンプレート] で、[データベース] ノードを展開し、[SQL Server] ノードを展開します。次に、[詳細設定] をクリックします。
テンプレートの一覧の [SQL Server 2008 データベース プロジェクト] をクリックします。
[名前] ボックスに「OrdersDB」と入力します。
[ソリューションのディレクトリを作成] チェック ボックスをオンにします。
[場所] ボックス、[ソリューション名] ボックス、および [ソース管理に追加] ボックスの既定値をそのまま使用し、[OK] をクリックします。
注意
この時点で、ソリューションをバージョン管理に追加できます。 このチュートリアルでは、最後の手順でソリューションをバージョン管理に追加します。
ソリューション エクスプローラーに、新しいデータベース プロジェクト ProductsDB が表示されます。
[表示] メニューの [スキーマ ビュー] をクリックします。
スキーマ ビューがまだ表示されていない場合は、表示されます。
次に、テーブルをデータベース プロジェクトに追加します。
OrderItems テーブルをデータベース プロジェクトに追加するには
スキーマ ビューで [OrdersDB] プロジェクトを右クリックし、[追加] をポイントし、[テーブル] をクリックします。
[新しい項目の追加] ダイアログ ボックスが表示されます。
[テンプレート] の [テーブル] をクリックします。
注意
[カテゴリ] ボックスの一覧で、[テーブルとビュー] をクリックすると、テーブルのテンプレートをより簡単に検索できます。
[名前] ボックスに、新しいテーブルの名前として「OrderItems」と入力します。
[追加] をクリックして、テーブルをデータベース プロジェクトに追加します。
ソリューション エクスプローラーに、データベース プロジェクトの新しいテーブルのファイルが表示されます。 スキーマ ビューに新しいテーブル オブジェクトが表示されます。 Transact-SQL エディターが表示され、新しいテーブルの定義が表示されます。
Transact-SQL エディターで、次の例に示すようにテーブルの定義を変更します。
-- ============================================= -- Create OrderItems table -- ============================================= CREATE TABLE [dbo].[OrderItems] ( [POID] INT NOT NULL, [ItemID] INT NOT NULL, [ProductID] INT NOT NULL, [Quantity] INT NOT NULL, [Price] FLOAT NOT NULL, [Notes] NVARCHAR(75) NULL ) ON [PRIMARY]
[ファイル] メニューの [dbo.OrderItems.table.sql の保存] をクリックします。
スキーマ ビューで、[dbo.OrderItems] ノードを展開します。
dbo.OrderItems テーブルの [列] ノードを展開します。
Transact-SQL エディターで定義した列が表示されます。
次に、OrderItems テーブルに主キーを追加します。
OrderItems テーブルに主キーを追加するには
スキーマ ビューで、[dbo.OrderItems] を右クリックし、[追加] をポイントします。次に、[主キー] をクリックします。
[新しい項目の追加] ダイアログ ボックスが表示されます。
[名前] ボックスに、新しい主キーの名前として「PK_OrderItems」と入力します。
[追加] をクリックして、主キーを追加します。
ソリューション エクスプローラーに、データベース プロジェクトの新しい主キーのファイルが表示されます。 スキーマ ビューに新しい主キー オブジェクトが表示されます。 Transact-SQL エディターが表示され、新しいキーの定義が表示されます。
注意
主キーのアイコンと共に赤の円で囲まれた白い "x" が表示されますが、これは既定の定義にエラーがあることを示します。 これは予期された動作であり、既定の定義で参照している "column_1" 列が存在しないために発生します。
Transact-SQL エディターで、次の例に示すように主キーの定義を変更します。
-- ============================================= -- Create PK_OrderItems primary key -- ============================================= ALTER TABLE [dbo].[OrderItems] ADD CONSTRAINT [PK_OrderItems] PRIMARY KEY CLUSTERED ([POID], [ItemID]) ON [PRIMARY]
[ファイル] メニューの [dbo.OrderItems.PK_OrderItems.pkey.sql の保存] をクリックします。
主キー定義が有効になり、アイコンのエラー インジケーターが消えます。
次に、データベース間参照を追加します。
別のデータベースのテーブルを参照するビューを追加するには
スキーマ ビューで [ビュー] ノードを右クリックし、[追加] をポイントして、[ビュー] をクリックします。
[名前] ボックスに、新しいビューに付ける名前として「ItemDetailsView」と入力し、[追加] をクリックします。
ソリューション エクスプローラーに、データベース プロジェクトの新しいビューのファイルが表示されます。 スキーマ ビューに新しいビュー オブジェクトが表示されます。 Transact-SQL エディターが表示され、新しいビューの定義が表示されます。
注意
スキーマ ビューでビューのアイコンと共に赤の円で囲まれた白い "x" が表示されますが、これは既定の定義にエラーがあることを示します。 これは予期された動作であり、既定の定義で参照している "[sometableorview]" テーブルまたはビューが存在しないために発生します。
Transact-SQL エディターで、次の例に示すようにテーブルの定義を変更します。
-- ============================================= -- Create ItemDetailsView view -- ============================================= CREATE VIEW [dbo].[ItemDetailsView] AS SELECT O.[POID], O.[ItemID], P.[ProductName], P.[UnitPrice], O.[Quantity], O.[Price], O.[Notes] FROM [dbo].[OrderItems] AS O INNER JOIN [ProductsDB].[dbo].[Products] AS P ON P.[ProductID] = O.[ProductID]
[ファイル] メニューの [dbo.ItemDetailsView.view.sql の保存] をクリックします。
[表示] メニューの [エラー一覧] をクリックします。
[エラー一覧] に 6 つのエラーが表示されます。 エラーが発生するのは、Visual Studio Premium は、ユーザーがデータベース プロジェクトを配置するときに参照するデータベースがターゲット サーバーに存在するかどうかを確認できないためです。 ユーザーは別のターゲットの場所に配置できるため、このエラーには注意が必要です。 このエラーを解決するには、次回データベース間参照を定義する必要があります。
データベース間参照を定義するには
ソリューション エクスプローラーで、[OrderItems] プロジェクトを展開し、[参照] ノードをクリックします。
[プロジェクト] メニューの [データベース参照の追加] をクリックします。
注意
[参照] ノードを右クリックし、[データベース参照の追加] をクリックすることもできます。
[データベース参照の追加] ダイアログ ボックスが表示されます。 ソリューションに含まれるデータベース プロジェクトは 1 つのみであるため、[データベース プロジェクト スキーマ (.dbschema)] が既定で指定されます。
[参照] をクリックします。
[データベース ファイルの選択] ダイアログ ボックスが表示されます。
必要条件のチュートリアルでプロジェクトをビルドしたときに作成された ProductsDB.dbschema ファイル (My Documents\Visual Studio 2008\Projects\ProductsDB\ProductsDB\sql\ProductsDB.dbschema など) を指定し、[開く] をクリックします。
[データベース参照変数] で、[データベース変数を定義する] チェック ボックスをオンにします。 [名前] ボックスに「ReferencedDBVar」と入力します。 [値] ボックスに「ProductsDB」と入力します。
注意
このチュートリアルでは、参照するデータベースは、参照を追加するデータベースと同じサーバー上に常に存在すると仮定できます。 したがって、サーバー名の変数を定義する必要はありません。
[スキーマ オブジェクトとスクリプトの更新] で、[データベース参照変数を使用する既存のスキーマ オブジェクト定義とスクリプトを更新する] チェック ボックスをオンにし、[OK] をクリックします。
[変更のプレビュー] ダイアログ ボックスで、[内部結合] をクリックして変更の詳細を表示し、[適用] をクリックします。
ビューの定義が次のように更新されます。
-- ============================================= -- Create ItemDetailsView view -- ============================================= CREATE VIEW [dbo].[ItemDetailsView] AS SELECT O.[POID], O.[ItemID], P.[ProductName], P.[UnitPrice], O.[Quantity], O.[Price], O.[Notes] FROM [dbo].[OrderItems] AS O INNER JOIN [$(ReferencedDBVar)].[dbo].[Products] AS P ON P.[ProductID] = O.[ProductID]
指定した変数名は参照先のテーブル名を示し、6 つのエラーが解決されました。 次に、データベース プロジェクトをビルドして配置します。
プロジェクトを構成、ビルド、および配置するには
ソリューション エクスプローラーで、[OrdersDB] (ソリューションではなくプロジェクト) をクリックします。
[プロジェクト] メニューの [OrdersDB のプロパティ] をクリックします。
プロジェクトのプロパティ ウィンドウが表示されます。
注意
ソリューション エクスプローラーで OrdersDB プロジェクトを右クリックし、[プロパティ] をクリックする方法もあります。
[配置] タブをクリックします。
[配置動作] ボックスの一覧の、[配置スクリプト (.sql) を作成してデータベースに配置します] をクリックします。
[編集] をクリックし、ターゲット接続を指定します。
OrdersDB データベースを配置するデータベース サーバーへの接続情報を指定します。
重要
このチュートリアルを実行するには、必要条件のチュートリアルで ProductsDB を配置したのと同じサーバーにデータベースを配置する必要があります。 別のサーバーに配置する場合、そのサーバーの変数を定義する必要があります。
[データベース名の選択または入力] ボックスに、「OrdersDB」と入力し、[OK] をクリックします。
[ターゲット接続] ボックスに接続文字列が表示され、[ターゲット データベース名] ボックスに "OrdersDB" と表示されます。
その他のオプションについては既定値をそのまま使用し、[ファイル] メニューを開き、[選択されたファイルを上書き保存] をクリックします。
プロジェクトの配置設定が保存されます。
[ビルド] メニューの [ソリューションのビルド] をクリックします。
データベース プロジェクトがビルドされます。 ビルドが成功した場合は、ステータス バーに "ビルドに成功しました。" と表示され、[出力] ウィンドウにビルド結果が表示されます。
ソリューション エクスプローラーで、[OrdersDB] (ソリューションではなくプロジェクト) をクリックします。
[ビルド] メニューの [OrdersDB の配置] をポイントします。
ビルド構成に指定した接続を使って、データベース プロジェクトが配置されます。 "配置に成功しました。" というメッセージが [出力] ウィンドウとステータス バーに表示されます。
次の手順
これで、データベース プロジェクトをバージョン管理し、チームと共有できるようになります。