AdventureWorks 中的結構描述
在 AdventureWorks 範例 OLTP 資料庫中,如資料表、檢視及程序等物件都包含於結構描述內。結構描述改變了存取這些物件的方式。此主題提供結構描述的簡短概觀,說明結構描述在 AdventureWorks 資料庫內的使用方式,而且提供存取結構描述內含之物件的方法及替換選項。
AdventureWorks 中的結構描述
在 Microsoft SQL Server 2005 結構描述與使用者是分開的:依據資料庫的原則,使用者擁有結構描述,而物件則內含於結構描述。如需詳細資訊,請參閱<使用者結構描述分隔>。
下表描述用於 AdventureWorks 的結構描述,並列出每個結構描述內的代表資料表。
結構描述 | 包含的關聯物件 | 範例 |
---|---|---|
HumanResources |
Adventure Works Cycles 的員工。 |
|
Person |
包含個別客戶、供應商和員工的名稱與地址資訊。 |
|
Production |
Adventure Works Cycles 製造及銷售的產品。 |
|
Purchasing |
向其採購零件與產品的供應商。 |
|
Sales |
客戶和銷售相關資料。 |
存取結構描述中的內含物件
使用者永遠具有預設的結構描述。當伺服器在解析 DML 或 DDL 陳述式中所指定之不合格物件的名稱時,其所搜尋的結構描述即是預設的結構描述。因此,參考預設結構描述中的物件時,不需要指定結構描述名稱。例如,如果 table_name 位於預設的結構描述中,陳述式 SELECT * FROM table_name 就能成功執行。
附註: |
---|
建立使用者時如果沒有指定預設結構描述,則預設的結構描述會是 dbo。如需詳細資訊,請參閱<CREATE USER (Transact-SQL)>。 |
若要存取預設結構描述以外的結構描述物件,至少必須指定兩個部份組成的識別碼 (schema_name**.**object_name)。對於參考結構描述範圍內物件的所有 DDL 和 DML 陳述式而言,一定要使用這種方式。
下列範例使用兩個 SELECT 陳述式,顯示如何參考預設結構描述外的物件。假設預設的結構描述不是 HumanResources
,則第一個陳述式會失敗,因為 Department
資料表沒有包含在預設的結構描述內。第二個陳述式會成功,因為它指定了包含該物件的結構描述。
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 2005 一起安裝的其他範例,為所有的結構描述範圍內物件至少指定了兩個部份的識別碼。無論使用者預設的結構描述為何,這些範例仍然能夠成功執行。
想要在自己的範例和測試中使用 AdventureWorks 的使用者,可能會想要使用不同於指定兩個部份識別碼的方法。SQL Server 2005 在 SQLServerEngineSamples.msi 中提供指令碼,此檔案提供兩個在 AdventureWorks 中使用結構描述的其他方法。
傳送物件到 DBO 結構描述
指令碼 AlterSchemaToDbo.sql 會將 AdventureWorks 中結構描述範圍內的每個物件傳送到 dbo 結構描述。執行此指令碼後,具有 dbo 之預設結構描述的使用者,在參考 DDL 和 DML 陳述式中的 AdventureWorks 物件時,就不一定需要使用兩個部份的識別碼。
重要事項: |
---|
程式碼範例和 SQL Server 2005 提供的範例,在執行 AlterSchemaToDbo.sql 後將不會執行,除非程式碼中指定的結構描述名稱已使用 dbo 加以替換或移除。 |
指令碼 AlterSchemaFromDbo.sql 會將 dbo 結構描述中的物件,傳送或傳回到執行該指令碼之前這些物件所在的結構描述中。
使用同義字
同義字是指定給結構描述範圍內物件的另一個名稱。指定的同義字是用來取代 DDL 與 DML 陳述式中的基底物件。
指令碼 CreateSynonymsDbo.sql 會為 AdventureWorks 中每個結構描述範圍物件建立一個同義字。同義字名稱與基底物件名稱相同,但是使用的是 dbo 結構描述。例如,HumanResources.Department 的同義字是 dbo.Department。這種方式有以下好處:
- 如果 dbo 是預設結構描述,那麼就不需要在 DDL 與 DML 陳述式中使用兩個部份的識別碼來指定這些物件。
- 此時可以使用程式碼範例及 SQL Server 2005 提供的範例,而且不需要修改。
指令碼 DropSynonymsDbo.sql 會卸除由 CreateSynonymsDbo.sql 指令碼建立的同義字。如需有關同義字的詳細資訊,請參閱<Using Synonyms>。
- 如需有關安裝這些指令碼的詳細資訊,請參閱<Readme_AdventureWorksScripts>。
請參閱
其他資源
AdventureWorks 資料字典
安裝 AdventureWorks 範例資料庫和範例