AdventureWorks のスキーマ
AdventureWorks サンプル OLTP データベースでは、テーブル、ビュー、プロシージャなどのオブジェクトがスキーマに含まれています。これらのオブジェクトへのアクセス方法はスキーマによって変わります。ここでは、スキーマが AdventureWorks データベースでどのように使用されているか、スキーマに含まれているオブジェクトにアクセスするにはどうすればよいか、他にどのようなアクセス方法があるかなど、スキーマの概要について簡単に説明します。
AdventureWorks のスキーマ
Microsoft SQL Server 2005 では、スキーマはユーザーから分離されています。データベース プリンシパルとして、ユーザーはスキーマを所有し、オブジェクトはスキーマに含まれます。詳細については、「ユーザーとスキーマの分離」を参照してください。
次の表は、AdventureWorks で使用されているスキーマを示しています。各スキーマの代表的なテーブルも含まれています。
スキーマ | 格納されているオブジェクトの種類 | 例 |
---|---|---|
HumanResources |
Adventure Works Cycles の従業員 |
|
Person |
個々の顧客、仕入先、および従業員の名前と住所 |
|
Production |
Adventure Works Cycles が製造および販売している製品 |
|
Purchasing |
部品や製品の仕入先 |
|
Sales |
顧客および販売関連のデータ |
スキーマに含まれているオブジェクトへのアクセス
ユーザーには常に既定のスキーマがあります。修飾されていないオブジェクト名が 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 Books Online のコード例や、SQL Server 2005 と一緒にインストールできる追加サンプルでは、すべてのスキーマ スコープ オブジェクトに対して少なくとも 2 つの要素から成る識別子が指定されています。これらの例は、ユーザーの既定のスキーマに関係なく成功します。
AdventureWorks を独自のサンプルやテストで使用する場合は、2 つの要素から成る識別子を指定する以外の方法も使用できます。SQL Server 2005 の SQLServerEngineSamples.msi には、AdventureWorks のスキーマを 2 とおりの異なる方法で使用するためのスクリプトが用意されています。
DBO スキーマへのオブジェクトの転送
AlterSchemaToDbo.sql スクリプトは、AdventureWorks のすべてのスキーマ スコープ オブジェクトを dbo スキーマに転送します。このスクリプトを実行した後、dbo が既定のスキーマになっているユーザーは、2 つの要素から成る識別子を使用しなくても、DDL ステートメントや DML ステートメントで AdventureWorks のオブジェクトを参照できます。
重要 : |
---|
AlterSchemaToDbo.sql を実行すると、SQL Server 2005 に付属のコード例やサンプルは実行できなくなります。これらを実行するには、コードで指定されているスキーマ名を dbo に置き換えるか削除する必要があります。 |
AlterSchemaFromDbo.sql スクリプトは、dbo スキーマにあるオブジェクトを、そのオブジェクトが最初に含まれていたスキーマ (AlterSchemaToDbo.sql スクリプトを実行する前のスキーマ) に転送します。
シノニムの使用
シノニムとは、スキーマ スコープ オブジェクトに対して指定される別の名前です。シノニムは、DDL ステートメントや DML ステートメントでベース オブジェクトの代わりに指定されます。
CreateSynonymsDbo.sql スクリプトは、AdventureWorks の各スキーマ スコープ オブジェクトのシノニムを作成します。作成されるシノニムは、名前はベース オブジェクトと同じですが、dbo スキーマを使用します。たとえば、HumanResources.Department のシノニムは dbo.Department になります。シノニムには、次の利点があります。
- dbo が既定のスキーマの場合、2 つの要素から成る識別子を使用しなくてもこれらのオブジェクトを DDL ステートメントや DML ステートメントで指定できます。
- SQL Server 2005 に付属のコード例やサンプルを変更せずに使用できます。
DropSynonymsDbo.sql スクリプトは、CreateSynonymsDbo.sql スクリプトによって作成されたシノニムを削除します。シノニムの詳細については、「シノニムの使用」を参照してください。
- これらのスクリプトのインストールの詳細については、「Readme_AdventureWorksScripts」を参照してください。
参照
その他の技術情報
AdventureWorks データ辞書
AdventureWorks のサンプル データベースとサンプルのインストール