次の方法で共有


AdventureWorks のスキーマ

AdventureWorks サンプル OLTP データベースでは、テーブル、ビュー、プロシージャなどのオブジェクトがスキーマに含まれています。これらのオブジェクトへのアクセス方法はスキーマによって変わります。ここでは、スキーマが AdventureWorks データベースでどのように使用されているか、スキーマに含まれているオブジェクトにアクセスするにはどうすればよいか、他にどのようなアクセス方法があるかなど、スキーマの概要について簡単に説明します。

AdventureWorks のスキーマ

SQL Server 2005 以降では、スキーマはユーザーから分離されています。データベース プリンシパルとして、ユーザーはスキーマを所有し、オブジェクトはスキーマに含まれます。詳細については、「ユーザーとスキーマの分離」を参照してください。

次の表は、AdventureWorks で使用されているスキーマを示しています。各スキーマの代表的なテーブルも含まれています。

スキーマ

格納されているオブジェクトの種類

HumanResources

Adventure Works Cycles の従業員

Employee テーブル

Department テーブル

Person

個々の顧客、仕入先、および従業員の名前と住所

Contact テーブル

Address テーブル

StateProvince テーブル

Production

Adventure Works Cycles が製造および販売している製品

BillOfMaterials テーブル

Product テーブル

WorkOrder テーブル

Purchasing

部品や製品の仕入先

PurchaseOrderDetail テーブル

PurchaseOrderHeader テーブル

Vendor テーブル

Sales

顧客および販売関連のデータ

Customer テーブル

SalesOrderDetail テーブル

SalesOrderHeader テーブル

スキーマに含まれているオブジェクトへのアクセス

ユーザーには常に既定のスキーマがあります。修飾されていないオブジェクト名が DML ステートメントや DDL ステートメントで指定されていると、サーバーでは既定のスキーマを検索して、その名前を解決します。したがって、既定のスキーマに含まれているオブジェクトを参照するときには、スキーマ名を指定する必要はありません。たとえば、SELECT * FROM table_name というステートメントは、table_name が既定のスキーマに含まれていれば成功します。

注意注意

ユーザーの作成時に既定のスキーマが指定されなかった場合は、dbo が既定のスキーマになります。詳細については、「CREATE USER (Transact-SQL)」を参照してください。

既定のスキーマ以外のスキーマのオブジェクトにアクセスするには、少なくとも 2 つの要素から成る識別子 (schema_name**.**object_name) を指定する必要があります。この指定方法は、スキーマ スコープ オブジェクトを参照するすべての DDL ステートメントおよび DML ステートメントに適用されます。

次の例では、2 つの SELECT ステートメントを使用して、既定のスキーマの外部にあるオブジェクトを参照しています。既定のスキーマが HumanResources でない場合、最初のステートメントは失敗します。これは、Department テーブルが既定のスキーマに含まれていないからです。2 番目のステートメントは、オブジェクトが含まれているスキーマを指定しているため、成功します。

USE AdventureWorks;
GO
--This statement fails.
SELECT Name, GroupName
FROM Department;
GO
--This statement succeeds.
SELECT Name, GroupName
FROM HumanResources.Department;
GO

AdventureWorks のスキーマに関するその他の使用方法

SQL Server オンライン ブックのコード例や、SQL Server と一緒にインストールできる追加サンプルでは、すべてのスキーマ スコープ オブジェクトに対して少なくとも 2 つの要素から成る識別子が指定されています。これらの例は、ユーザーの既定のスキーマに関係なく成功します。

AdventureWorks を独自のサンプルやテストで使用する場合は、2 つの要素から成る識別子を指定する以外の方法も使用できます。SQL Server の SQLServerEngineSamples.msi には、AdventureWorks のスキーマを 2 とおりの異なる方法で使用するためのスクリプトが用意されています。

DBO スキーマへのオブジェクトの転送

AlterSchemaToDbo.sql スクリプトは、AdventureWorks のすべてのスキーマ スコープ オブジェクトを dbo スキーマに転送します。このスクリプトを実行した後、dbo が既定のスキーマになっているユーザーは、2 つの要素から成る識別子を使用しなくても、DDL ステートメントや DML ステートメントで AdventureWorks のオブジェクトを参照できます。

重要な注意事項重要

AlterSchemaToDbo.sql を実行すると、SQL Server に付属のコード例やサンプルは実行できなくなります。これらを実行するには、コードで指定されているスキーマ名を dbo に置き換えるか削除する必要があります。

AlterSchemaFromDbo.sql スクリプトは、dbo スキーマにあるオブジェクトを、そのオブジェクトが最初に含まれていたスキーマ (AlterSchemaToDbo.sql スクリプトを実行する前のスキーマ) に転送します。

シノニムの使用

シノニムとは、スキーマ スコープ オブジェクトに対して指定される別の名前です。シノニムは、DDL ステートメントや DML ステートメントでベース オブジェクトの代わりに指定されます。

CreateSynonymsDbo.sql スクリプトは、AdventureWorks の各スキーマ スコープ オブジェクトのシノニムを作成します。作成されるシノニムは、名前はベース オブジェクトと同じですが、dbo スキーマを使用します。たとえば、HumanResources.Department のシノニムは dbo.Department になります。シノニムには、次の利点があります。

  • dbo が既定のスキーマの場合、2 つの要素から成る識別子を使用しなくてもこれらのオブジェクトを DDL ステートメントや DML ステートメントで指定できます。

  • SQL Server に付属のコード例やサンプルを変更せずに使用できます。

DropSynonymsDbo.sql スクリプトは、CreateSynonymsDbo.sql スクリプトによって作成されたシノニムを削除します。シノニムの詳細については、「シノニムの使用」を参照してください。

  • これらのスクリプトのインストールの詳細については、「Readme_AdventureWorksScripts」を参照してください。