チュートリアル : 他のデータベースを参照するデータベースの作成と配置
このチュートリアルでは、あるデータベースについて、他のデータベースを参照するデータベース プロジェクトを作成します。 プロジェクトが参照するデータベースも Visual Studio Team System Database Edition を使用して管理できますが、そのデータベースは他のソリューションに含まれています。 この方法では、複数の開発者がさまざまなデータベースを管理する場合や、参照のターゲットであるデータベースを開発者が配置できない場合などの一般的なシナリオをエミュレートします。
このチュートリアルでは、次の作業について説明します。
データベース プロジェクトを作成する方法。
他のデータベース プロジェクトによって生成された .dbschema ファイルを参照する方法。
参照しているデータベース プロジェクトの変数およびその値を定義する方法。
分離開発環境にデータベースを配置する方法。
前提条件
Visual Studio Team System Database Edition をインストールしている必要があります。 また、「チュートリアル : バージョン管理されたデータベースの新規作成と配置」を完了し、結果のデータベースを分離開発環境に配置している必要があります。 プロジェクトをバージョン管理に追加するには、Visual Studio Team System Team Foundation Server や Visual SourceSafe などのバージョン管理ソフトウェアがインストールされている必要があります。
データベース プロジェクトを作成するには
[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
[新しいプロジェクト] ダイアログ ボックスが表示されます。
[プロジェクトの種類] の [データベース プロジェクト] を展開し、[SQL Server 2005] をクリックします。
[テンプレート] の [SQL Server 2005 データベース プロジェクト] をクリックします。
[名前] ボックスに「OrdersDB」と入力します。
[ソリューションのディレクトリを作成] チェック ボックスをオンにします。
[場所] ボックス、[ソリューション名] ボックス、および [ソース管理に追加] ボックスの既定値をそのまま使用し、[OK] をクリックします。
メモ : この時点で、ソリューションをバージョン管理に追加できます。このチュートリアルでは、最後の手順でソリューションをバージョン管理に追加します。
ソリューション エクスプローラに、新しいデータベース プロジェクト ProductsDB が表示されます。
[表示] メニューの [スキーマ ビュー] をクリックします。
スキーマ ビューがまだ表示されていない場合は、表示されます。
次に、テーブルをデータベース プロジェクトに追加します。
OrderItems テーブルをデータベース プロジェクトに追加するには
スキーマ ビューで、[OrdersDB] ノード、[スキーマ] ノード、[dbo] ノードの順に展開し、[テーブル] ノードをクリックします。
OrdersDB プロジェクトを右クリックして [追加] をポイントし、[テーブル] をクリックします。
[新しい項目の追加] ダイアログ ボックスが表示されます。
[テンプレート] の [テーブル] をクリックします。
メモ : [カテゴリ] ボックスの一覧で、[テーブルとビュー] をクリックすると、テーブルのテンプレートを簡単に検索できます。
[名前] ボックスに、新しいテーブルの名前として「OrderItems」と入力します。
[追加] をクリックして、テーブルをデータベース プロジェクトに追加します。
ソリューション エクスプローラに、データベース プロジェクトの新しいテーブルのファイルが表示されます。スキーマ ビューに新しいテーブル オブジェクトが表示されます。 Transact-SQL (T-SQL) エディタに新しいテーブルの定義が表示されます。
T-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 テーブルの [列] ノードを展開します。
T-SQL エディタで定義した列が表示されます。
次に、OrderItems テーブルに主キーを追加します。
OrderItems テーブルに主キーを追加するには
スキーマ ビューで、[dbo.OrderItems] をクリックします。
[プロジェクト] メニューの [新しい項目の追加] をクリックします。
[新しい項目の追加] ダイアログ ボックスが表示されます。
メモ : dbo.OrderItems テーブルを右クリックし、[追加] をポイントし、[主キー] をクリックすることもできます。
[テンプレート] の [主キー] をクリックします。
[名前] ボックスに、新しい主キーの名前として「PK_OrderItems」と入力します。
[追加] をクリックして、主キーを追加します。
メモ : 主キーのアイコンと共に赤の円で囲まれた白い "x" が表示されますが、これは既定の定義にエラーがあることを示します。 これは予期された動作であり、既定の定義で参照している "column_1" 列が存在しないために発生します。
T-SQL エディタで、次の例に示すように主キーの定義を変更します。
-- ============================================= -- Create PK_OrderItems primary key -- ============================================= ALTER TABLE [dbo].[OrderItems] ADD CONSTRAINT [PK_OrderItems] PRIMARY KEY CLUSTERED ([POID], [ItemID]) ON [PRIMARY]
ソリューション エクスプローラに、データベース プロジェクトの新しい主キーのファイルが表示されます。スキーマ ビューに新しい主キー オブジェクトが表示されます。 T-SQL エディタに新しいキーの定義が表示されます。
[ファイル] メニューの [dbo.OrderItems.PK_OrderItems.pkey.sql の保存] をクリックします。
主キー定義が有効になり、アイコンのエラー インジケータが消えます。
次に、データベース間参照を追加します。
別のデータベースにテーブルを参照するビューを追加するには
スキーマ ビューで、[ビュー] ノードをクリックします。
[プロジェクト] メニューの [新しい項目の追加] をクリックします。
[新しい項目の追加] ダイアログ ボックスが表示されます。
メモ : また、OrdersDB プロジェクトを右クリックして [追加] をポイントし、[ビュー] をクリックします。
[テンプレート] の [ビュー] をクリックします。
メモ : [カテゴリ] ボックスの一覧で、[テーブルとビュー] をクリックすると、テーブルのテンプレートを簡単に検索できます。
[名前] に、新しいビューに割り当てる名前として「ItemDetailsView」と入力し、[追加] をクリックします。
ソリューション エクスプローラに、データベース プロジェクトのビューの新しいファイルが表示されます。 スキーマ ビューに新しいビュー オブジェクトが表示されます。 Transact-SQL (T-SQL) エディタに新しいビューの定義が表示されます。
メモ : スキーマ ビューでビューのアイコンと共に赤の円で囲まれた白い "x" が表示されますが、これは既定の定義にエラーがあることを示します。 これは予期された動作であり、既定の定義で参照している "[sometableorview]" テーブルまたはビューが存在しないために発生します。
T-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 つのエラーが表示されます。 データベース プロジェクトを配置するときに、Database Edition は参照先のデータベースがターゲット サーバー上に存在しているかどうかを検証できないためエラーが発生します。 この条件は、別のターゲットの場所に配置できるため重要です。 このエラーを解決するには、次に、データベース間参照を定義する必要があります。
データベース間参照を定義するには
ソリューション エクスプローラで、OrderItems プロジェクトを展開し、[参照] ノードをクリックします。
[プロジェクト] メニューの [データベース参照の追加] をクリックします。
メモ : また、[参照] ノードを右クリックし、[参照の追加] をクリックすることもできます。
[データベース参照の追加] ダイアログ ボックスが表示されます。 ソリューションに含まれるデータベース プロジェクトは 1 つだけなので、既定では、[データベース プロジェクト スキーマ (.dbschema)] が指定されます。
[参照] をクリックします。
[データベース ファイルの選択] ダイアログ ボックスが表示されます。
必修のチュートリアル (My Documents\Visual Studio 2008\Projects\ProductsDB\ProductsDB\sql\ProductsDB.dbschema など) でプロジェクトをビルドするときに作成された ProductsDB.dbschema ファイルを指定して、[開く] をクリックします。
[データベース参照変数] で、[データベース変数を定義する] チェック ボックスをオンにします。 [名前] に「ReferencedDBVar」と入力します。 [値] ボックスに「ProductsDB」と入力します。
メモ : このチュートリアルでは、参照先のデータベースが参照を追加する先のデータベースと常に同じサーバー上にあることを前提にしています。 そのため、サーバー名の変数を定義する必要はありません。
[スキーマ オブジェクトとスクリプトの更新] で、[データベース参照変数を使用する既存のスキーマ オブジェクト定義とスクリプトを更新する] チェック ボックスをオンにして、[OK] をクリックします。
[変更のプレビュー] ダイアログ ボックスで、INNER JOIN をクリックして変更の詳細を表示し、[適用] をクリックします。
ビューの定義が次のように更新されます。
-- ============================================= -- 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 の配置] をポイントします。
ビルド構成に指定した接続を使って、データベース プロジェクトが配置されます。"配置に成功しました。" というメッセージが [出力] ウィンドウとステータス バーに表示されます。
次の手順
通常、これでデータベース プロジェクトをバージョン管理してチームと共有できるようになります。