チュートリアル : バージョン管理されたデータベースの新規作成と配置
更新 : 2010 年 7 月
このチュートリアルでは、2 つのテーブルと 1 つのストアド プロシージャを持つ単純なデータベースを作成します。 このプロセスでは、データベース プロジェクトを作成し、そのプロジェクトのデータベース オブジェクトを作成し、この変更をビルドしてデータベース サーバーに配置します。 データベース プロジェクトを作成し、そのデータベース プロジェクトをバージョン管理することにより、データベース スキーマをバージョン管理できます。
このトピックは、稼動環境または稼動前環境への配置方法を示すことを目的としていません。 これらのタイプの環境に配置するには、通常 VSDBCMD.EXE ユーティリティを使用するか、配置スクリプトを使用して手動で配置します。 詳細については、次のトピックを参照してください。
このチュートリアルの主な手順は次のとおりです。
データベース プロジェクトを作成します。
データベース テーブルを作成します。
テーブルのインデックス、キー、および制約を作成します。
2 つのストアド プロシージャを作成します。
データベース プロジェクトのプロパティを構成します。
データベース プロジェクトをビルドします。
データベース プロジェクトを配置します。
データベース プロジェクトをバージョン管理します。
必須コンポーネント
このチュートリアルを実行するには、SQL Server 2008 を実行しているデータベース サーバーでデータベースを作成するためのアクセス許可を持つアカウントでログオンする必要があります。
データベース プロジェクトを作成するには
[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
[新しいプロジェクト] ダイアログ ボックスが表示されます。
[インストールされたテンプレート] で、[データベース] ノードを展開し、[SQL Server] をクリックします。
注意
Visual Studio Professional を使用している場合は、代わりに [インストールされたテンプレート] で、[データベース] ノードを展開し、[SQL Server] ノードを展開します。次に、[詳細設定] をクリックします。
テンプレートの一覧の [SQL Server 2008 データベース プロジェクト] をクリックします。
[名前] ボックスに「OrdersDB」と入力します。
[ソリューションのディレクトリを作成] チェック ボックスをオンにします。
[場所] ボックス、[ソリューション名] ボックス、および [ソース管理に追加] ボックスの既定値をそのまま使用し、[OK] をクリックします。
注意
この時点で、ソリューションをバージョン管理に追加できます。 このチュートリアルでは、最後の手順でソリューションをバージョン管理に追加します。
ソリューション エクスプローラーに、新しいデータベース プロジェクト OrdersDB が表示されます。
[表示] メニューの [スキーマ ビュー] をクリックします。
スキーマ ビューがまだ表示されていない場合は、表示されます。
次に、スキーマをデータベース プロジェクトに追加します。
Sales スキーマをデータベース プロジェクトに追加するには
スキーマ ビューで、[OrdersDB] ノードを展開し、[スキーマ] ノードをクリックします。
[プロジェクト] メニューの [新しい項目の追加] をクリックします。
[新しい項目の追加] ダイアログ ボックスが表示されます。
注意
スキーマ ビューで [OrdersDB] プロジェクトを右クリックし、[追加] をポイントし、[スキーマ] をクリックする方法もあります。
[テンプレート] の [スキーマ] をクリックします。
注意
[カテゴリ] ボックスの一覧で、[テーブルとビュー] をクリックすると、テーブルのテンプレートをより簡単に検索できます。
[名前] ボックスに、新しいスキーマの名前として「Sales」と入力します。
[追加] をクリックし、スキーマをデータベース プロジェクトに追加します。
ソリューション エクスプローラーに、データベース プロジェクトの新しいスキーマのファイルが表示されます。 スキーマ ビューに新しいスキーマ オブジェクトが表示されます。 Transact-SQL エディターが表示され、新しいスキーマの定義が表示されます。
次に、テーブルをデータベース プロジェクトに追加します。
Customer テーブルをデータベース プロジェクトに追加するには
スキーマ ビューで、[Sales] ノードをして、[テーブル] ノードを右クリックします。次に、[追加] をポイントし、[テーブル] をクリックします。
[名前] ボックスに、新しいテーブルの名前として「Customer」と入力します。
[追加] をクリックして、テーブルをデータベース プロジェクトに追加します。
ソリューション エクスプローラーに、データベース プロジェクトの新しいテーブルのファイルが表示されます。 スキーマ ビューに新しいテーブル オブジェクトが表示されます。 Transact-SQL エディターが表示され、新しいテーブルの定義が表示されます。
Transact-SQL エディターで、次の例に示すようにテーブルの定義を変更します。
CREATE TABLE [Sales].[Customer] ( [CustomerID] INT IDENTITY (1, 1) NOT NULL, [CustomerName] NVARCHAR (40) NOT NULL, [YTDOrders] INT NOT NULL, [YTDSales] INT NOT NULL );
[ファイル] メニューの [Sales.Customer.table.sql の保存] をクリックします。
スキーマ ビューで、[Sales.Customer] ノードを展開します。
Sales.Customer テーブルの [列] ノードを展開します。
Transact-SQL エディターで定義した 4 つの列が表示されます。
次に、Customer テーブルに主キーを追加します。
Customer テーブルにインデックスを追加するには
スキーマ ビューで、[Sales.Customer] を右クリックし、[追加] をポイントします。次に、[インデックス] をクリックします。
[新しい項目の追加] ダイアログ ボックスが表示されます。
[テンプレート] の [インデックス] をクリックします。
[名前] ボックスに、新しいインデックスの名前として「IX_CustomerCustomerName」と入力します。
[追加] をクリックして、インデックスを Categories テーブルに追加します。
ソリューション エクスプローラーに、データベース プロジェクトの新しいインデックスのファイルが表示されます。 スキーマ ビューに新しいインデックス オブジェクトが表示されます。 Transact-SQL エディターが表示され、新しいインデックスの定義が表示されます。
注意
スキーマ ビューでインデックスのアイコンと共に赤の円で囲まれた白い "x" が表示されますが、これは既定の定義にエラーがあることを示します。 これは予期された動作であり、既定の定義で参照している "column_1" 列が存在しないために発生します。
Transact-SQL エディターで、次の例に示すようにインデックスの定義を変更します。
CREATE INDEX [IX_CustomerCustomerName] ON [Sales].[Customer] (CustomerName)
[ファイル] メニューの [Sales.Customer.IX_CustomerCustomerName.index.sql の保存] をクリックします。
インデックス定義が有効になり、アイコンのエラー インジケーターが消えます。
次に、Customer テーブルに主キーを追加します。
Customer テーブルに主キーを追加するには
スキーマ ビューで、[Sales.Customer] を右クリックし、[追加] をポイントします。次に、[主キー] をクリックします。
[新しい項目の追加] ダイアログ ボックスが表示されます。
[テンプレート] の [主キー] をクリックします。
[名前] ボックスに、新しい主キーの名前として「PK_CustomerCustomerID」と入力します。
[追加] をクリックし、Customer テーブルに主キーを追加します。
ソリューション エクスプローラーに、データベース プロジェクトの新しい主キーのファイルが表示されます。 スキーマ ビューに新しい主キー オブジェクトが表示されます。 Transact-SQL エディターが表示され、新しいキーの定義が表示されます。
注意
主キーのアイコンと共に赤の円で囲まれた白い "x" が表示されますが、これは既定の定義にエラーがあることを示します。 これは予期された動作であり、既定の定義で参照している "column_1" 列が存在しないために発生します。
Transact-SQL エディターで、次の例に示すように主キーの定義を変更します。
ALTER TABLE [Sales].[Customer] ADD CONSTRAINT [PK_CustomerCustomerID] PRIMARY KEY (CustomerID)
[ファイル] メニューの [Sales.Customer.PK_CustomerCustomerID.pkey.sql の保存] をクリックします。
主キー定義が有効になり、アイコンのエラー インジケーターが消えます。
次に、Orders テーブルを追加します。
Orders テーブルに列を追加するには
スキーマ ビューで、[OrdersDB] をクリックします。
[プロジェクト] メニューの [新しい項目の追加] をクリックします。
[新しい項目の追加] ダイアログ ボックスが表示されます。
注意
スキーマ ビューで [OrdersDB] プロジェクトを右クリックし、[追加] をポイントし、[テーブル] をクリックする方法もあります。
[テンプレート] の [テーブル] をクリックします。
[名前] ボックスに、新しいテーブルの名前として「Orders」と入力します。
[追加] をクリックして、テーブルをデータベース プロジェクトに追加します。
ソリューション エクスプローラーに、データベース プロジェクトの新しいテーブルのファイルが表示されます。 スキーマ ビューに新しいテーブル オブジェクトが表示されます。 Transact-SQL エディターが表示され、新しいテーブルの定義が表示されます。
Transact-SQL エディターで、次の例に示すようにテーブルの定義を変更します。
CREATE TABLE [Sales].[Orders] ( [CustomerID] INT NOT NULL, [OrderID] INT IDENTITY (1, 1) NOT NULL, [OrderDate] DATETIME NOT NULL, [FilledDate] DATETIME NULL, [Status] CHAR (1) NOT NULL, [Amount] INT NOT NULL );
[ファイル] メニューの [Sales.Orders.table.sql の保存] をクリックします。
スキーマ ビューで、[Sales.Orders] ノードを展開します。
Sales.Orders テーブルの [列] ノードを展開します。
Transact-SQL エディターで定義した列が表示されます。
次に、Products テーブルにインデックスを追加します。
Orders テーブルに主キーを追加するには
スキーマ ビューで、[Sales.Orders] を右クリックし、[追加] をポイントします。次に、[主キー] をクリックします。
[新しい項目の追加] ダイアログ ボックスが表示されます。
[テンプレート] の [主キー] をクリックします。
[名前] ボックスに、新しい主キーの名前として「PK_OrdersOrderID」と入力します。
[追加] をクリックし、Orders テーブルに主キーを追加します。
ソリューション エクスプローラーに、データベース プロジェクトの新しい主キーのファイルが表示されます。 スキーマ ビューに新しい主キー オブジェクトが表示されます。 Transact-SQL エディターに新しい主キーの定義が表示されます。
注意
主キーのアイコンと共に赤の円で囲まれた白い "x" が表示されますが、これは既定の定義にエラーがあることを示します。 これは予期された動作であり、既定の定義で参照している "column_1" 列が存在しないために発生します。
Transact-SQL エディターで、次の例に示すように主キーの定義を変更します。
ALTER TABLE [Sales].[Orders] ADD CONSTRAINT [PK_Orders_OrderID] PRIMARY KEY CLUSTERED ([OrderID] ASC) WITH (ALLOW_PAGE_LOCKS = ON, ALLOW_ROW_LOCKS = ON, PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF);
[ファイル] メニューの [Sales.Orders.PK_Orders_OrderID.pkey.sql の保存] をクリックします。
主キー定義が有効になり、アイコンのエラー インジケーターが消えます。
次に、Orders テーブルに外部キーを追加します。
Orders テーブルと Customer テーブルとの間の外部キーを追加するには
スキーマ ビューで、[Sales.Orders] を右クリックし、[追加] をポイントします。次に、[外部キー] をクリックします。
[新しい項目の追加] ダイアログ ボックスが表示されます。
[テンプレート] の [外部キー] をクリックします。
[名前] ボックスに、新しい外部キーの名前として「FK_OrdersCustomer」と入力します。
[追加] をクリックし、Orders テーブルに外部キーを追加します。
ソリューション エクスプローラーに、データベース プロジェクトの新しい外部キーのファイルが表示されます。 スキーマ ビューに新しい外部キー オブジェクトが表示されます。 Transact-SQL エディターに新しい外部キーの定義が表示されます。
注意
外部キーのアイコンと共に赤の円で囲まれた白い "x" が表示されますが、これは既定の定義にエラーがあることを示します。 これは予期された動作であり、既定の定義で参照している "column_1" 列が存在しないために発生します。
Transact-SQL エディターで、次の例に示すように外部キーの定義を変更します。
ALTER TABLE [Sales].[Orders] ADD CONSTRAINT [FK_Orders_Customer_CustID] FOREIGN KEY ([CustomerID]) REFERENCES [Sales].[Customer] ([CustomerID]) ON DELETE NO ACTION ON UPDATE NO ACTION;
[ファイル] メニューの [Sales.Orders.FK_OrdersCustomer.fkey.sql の保存] をクリックします。
外部キー定義が有効になり、アイコンのエラー インジケーターが消えます。
次に、Products テーブルに CHECK 制約を追加します。
Orders テーブルに CHECK 制約を追加するには
スキーマ ビューで、[Sales.Orders] をクリックし、[追加] をポイントします。次に、[制約のチェック] をクリックします。
[新しい項目の追加] ダイアログ ボックスが表示されます。
[テンプレート] の [CHECK 制約] をクリックします。
[名前] ボックスに、新しい CHECK 制約の名前として「CK_OrderStatus」と入力します。
[追加] をクリックして、Products テーブルに制約を追加します。
ソリューション エクスプローラーに、データベース プロジェクトの新しい制約のファイルが表示されます。 スキーマ ビューに新しい制約オブジェクトが表示されます。 Transact-SQL エディターが表示され、新しい制約の定義が表示されます。
注意
制約のアイコンと共に赤の円で囲まれた白い "x" が表示されますが、これは既定の定義にエラーがあることを示します。 これは予期された動作であり、既定の定義で参照している "column_1" 列が存在しないために発生します。
Transact-SQL エディターで、次の例に示すように制約の定義を変更します。
ALTER TABLE [Sales].[Orders] ADD CONSTRAINT [CK_OrderStatus] CHECK ([Status] IN ('O','X','F','B'))
[ファイル] メニューの [Sales.Orders.CK_OrderStatus.chkconst.sql の保存] をクリックします。
制約定義が有効になり、アイコンのエラー インジケーターが消えます。
次に、プロジェクトに 2 つのストアド プロシージャを追加します。
顧客を追加するストアド プロシージャを作成するには
スキーマ ビューの [スキーマ] で、[Sales] を右クリックして [追加] をポイントし、[ストアド プロシージャ] をクリックします。
[名前] ボックスに、新しいストアド プロシージャの名前として「uspNewCustomer」と入力します。
[追加] をクリックして、ストアド プロシージャをデータベース プロジェクトに追加します。
ソリューション エクスプローラーに、データベース プロジェクトの新しいストアド プロシージャのファイルが表示されます。 スキーマ ビューに新しいストアド プロシージャ オブジェクトが表示されます。 Transact-SQL エディターに新しいストアド プロシージャの定義が表示されます。
Transact-SQL エディターで、次の例に示すようにストアド プロシージャの定義を変更します。
CREATE PROCEDURE [Sales].[uspNewCustomer] @CustomerName NVARCHAR (40) AS BEGIN INSERT INTO [Sales].[Customer] (CustomerName) VALUES (@CustomerName); SELECT SCOPE_IDENTITY() END
[ファイル] メニューの [Sales.uspNewCustomer.proc.sql の保存] をクリックします。
スキーマ ビューで、[プログラミング] ノードを展開し、[ストアド プロシージャ] ノードを展開します。
Transact-SQL エディターで定義したプロシージャが表示されます。
次に、顧客の注文を配置する 2 番目のストアド プロシージャを追加します。
顧客の注文を配置する 2 番目のストアド プロシージャを追加するには
スキーマ ビューで、[OrdersDB] をクリックします。
[プロジェクト] メニューの [新しい項目の追加] をクリックします。
[新しい項目の追加] ダイアログ ボックスが表示されます。
注意
スキーマ ビューで [OrdersDB] プロジェクトを右クリックし、[追加] をポイントし、[ストアド プロシージャ] をクリックする方法もあります。
[カテゴリ] の [データベース プロジェクト] を展開し、[プログラミング] をクリックします。
[テンプレート] の [ストアド プロシージャ] をクリックします。
[名前] ボックスに、新しいストアド プロシージャの名前として「uspPlaceNewOrder」と入力します。
[追加] をクリックして、ストアド プロシージャをデータベース プロジェクトに追加します。
ソリューション エクスプローラーに、データベース プロジェクトの新しいストアド プロシージャのファイルが表示されます。 スキーマ ビューに新しいストアド プロシージャ オブジェクトが表示されます。 Transact-SQL エディターに新しいストアド プロシージャの定義が表示されます。
Transact-SQL エディターで、次の例に示すようにストアド プロシージャの定義を変更します。
CREATE PROCEDURE [Sales].[uspPlaceNewOrder] @CustomerID INT, @Amount INT, @OrderDate DATETIME, @Status CHAR (1)='O' AS BEGIN DECLARE @RC INT BEGIN TRANSACTION INSERT INTO [Sales].[Orders] (CustomerID, OrderDate, FilledDate, Status, Amount) VALUES (@CustomerID, @OrderDate, NULL, @Status, @Amount) SELECT @RC = SCOPE_IDENTITY(); UPDATE [Sales].[Customer] SET YTDOrders = YTDOrders + @Amount WHERE [CustomerID] = @CustomerID COMMIT TRANSACTION RETURN @RC END
[ファイル] メニューの [Sales.uspPlaceNewOrder.proc.sql の保存] をクリックします。
スキーマ ビューで、[プログラミング] ノードを展開し、[ストアド プロシージャ] ノードを展開します。
Transact-SQL エディターで定義したプロシージャが表示されます。
次に、プロジェクトをビルドして配置する前の準備として、プロジェクトの設定を構成します。
プロジェクトの配置用設定を構成するには
ソリューション エクスプローラーで、[OrdersDB] (ソリューションではなくプロジェクト) をクリックします。
[プロジェクト] メニューの [OrdersDB のプロパティ] をクリックします。
プロジェクトのプロパティ ウィンドウが表示されます。
注意
ソリューション エクスプローラーで OrdersDB プロジェクトを右クリックし、[プロパティ] をクリックする方法もあります。
[配置] タブをクリックします。
[配置動作] ボックスの一覧の [配置スクリプト (.sql) を作成してデータベースに配置します] をクリックします。
[編集] をクリックし、ターゲット接続を指定します。
OrdersDB データベースを配置するデータベース サーバーへの接続情報を指定します。
[データベース名の選択または入力] ボックスに、「OrdersDB」と入力し、[OK] をクリックします。
[ターゲット接続] ボックスに接続文字列が入力されます。 [ターゲット データベース名] は OrdersDB に設定されます。
その他のオプションについては既定値を使用します。
[ファイル] メニューの [選択されたファイルを上書き保存] をクリックします。
プロジェクト ビルドの設定が保存されます。
次に、データベース プロジェクトをビルドします。
データベース プロジェクトをビルドするには
[ビルド] メニューの [ソリューションのビルド] をクリックします。
データベース プロジェクトがビルドされます。 成功した場合は、ステータス バーに "ビルド正常終了" と表示され、[出力] ウィンドウにビルド結果が表示されます。
最後に、データベース プロジェクトを配置します。
データベース プロジェクトをデータベース サーバーに配置するには
ソリューション エクスプローラーで、[OrdersDB] (ソリューションではなくプロジェクト) をクリックします。
[ビルド] メニューの [OrdersDB の配置] をクリックします。
ビルド構成に指定した接続を使って、データベース プロジェクトが配置されます。 "配置に成功しました。" というメッセージが [出力] ウィンドウとステータス バーに表示されます。
データベース プロジェクトをバージョン管理にチェックインするには
ソリューション エクスプローラーで、[OrdersDB] (ソリューション) をクリックします。
[ファイル] メニューの [ソース管理] をポイントし、[ソリューションをソース管理に追加] をクリックします。
ここで、インストール済みのバージョン管理ソフトウェアを使用して操作します。 このチュートリアルでは、Team Foundation Server にプロジェクトを追加する手順について説明します。 異なるバージョン管理ソフトウェアを使用する場合、同等の手順を実行してください。 Team Foundation Server を使用している場合は、[Team Foundation Server に接続] ダイアログ ボックスが表示されます。
[Team Foundation Server に接続] で、ソリューションを追加するチーム プロジェクトが格納されているサーバーをクリックします。
注意
データベース プロジェクトを追加できるチーム プロジェクトがない場合は、「プロジェクトの計画および追跡」を参照してください。
[チーム プロジェクト] で、データベース プロジェクトを追加するチーム プロジェクトをクリックし、[OK] をクリックします。
[ソリューション OrdersDB をソース管理に追加] ダイアログ ボックスが表示されます。
[OK] をクリックして既定値を受け入れます。
データベース プロジェクトおよびそれを格納するファイルがバージョン管理されます。 最初は、それらはまだチェックアウトされています。 他のチーム メンバーがアクセスする前にチェックインする必要があります。
[表示] メニューの [その他のウィンドウ] をポイントし、[保留中の変更] をクリックします。
[保留中の変更] ウィンドウが表示されます。
[コメント] ボックスに、「Initial database project creation」と入力します。
[保留中の変更] ウィンドウで、ツール バーの [チェックイン] をクリックします。
データベース プロジェクトおよびそれに含まれているファイルがチェックインされるときに、[チェックインの進行状況] ダイアログ ボックスが表示されます。 ソリューション エクスプローラー内のアイコンが更新され、ファイルがバージョン管理にチェックインされたことを示します。
次の手順
他のチュートリアルを実行して、配置されている既存のデータベースを操作する方法を学習できます。
参照
概念
データベースのビルドとステージング環境または稼動環境への配置
履歴の変更
日付 |
履歴 |
理由 |
---|---|---|
2010 年 7 月 |
チュートリアルの目的を明確化し、他の配置シナリオを説明するトピックへのリンクを追加しました。 |
カスタマー フィードバック |