AdventureWorks 中的架构
在 AdventureWorks 示例 OLTP 数据库中,像表、视图和过程这样的对象包含在架构中。架构可更改访问这些对象的方式。本主题简要介绍架构,说明如何在 AdventureWorks 数据库中使用架构,并提供了访问包含在架构中的对象的方法和备选方法。
AdventureWorks 中的架构
在 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 一起安装的其他示例中,所有架构范围内的对象都指定了至少由两部分构成的标识符。不管用户的默认架构是什么,这些示例都能成功运行。
需要在自己的示例和测试中使用 AdventureWorks 的用户可能需要一种方法来指定由两部分构成的标识符。SQL Server 的 SQLServerEngineSamples.msi 中提供了一些脚本,这些脚本提供两种使用 AdventureWorks 中的架构的方法。
将对象传输到 DBO 架构
AlterSchemaToDbo.sql 脚本将 AdventureWorks 中每个架构范围内的对象传输到 dbo 架构。运行此脚本后,默认架构为 dbo 的用户在 DDL 和 DML 语句中引用 AdventureWorks 对象时,就不需要使用由两部分构成的标识符。
重要提示 |
---|
执行 AlterSchemaToDbo.sql 后,除非用 dbo 替换 SQL Server 所提供的代码示例中指定的架构名或将其删除,否则这些代码示例将无法运行。 |
AlterSchemaFromDbo.sql 脚本将对象从 dbo 架构传输回运行 AlterSchemaToDbo.sql 脚本前它们所在的架构。
使用同义词
同义词是架构范围内的对象所具有的另一个名称。在 DDL 和 DML 语句中,指定的是同义词而不是基对象。
CreateSynonymsDbo.sql 脚本为 AdventureWorks 中每个架构范围内的对象创建一个同义词。同义词名称与基对象名称相同,但使用的是 dbo 架构。例如,HumanResources.Department 的同义词为 dbo.Department。这样做有下列优点:
如果 dbo 是默认架构,则在 DDL 和 DML 语句中指定这些对象时就不需要使用由两部分构成的标识符。
SQL Server 提供的代码示例可以直接使用,而无需修改。
DropSynonymsDbo.sql 脚本删除 CreateSynonymsDbo.sql 脚本所创建的同义词。有关同义词的详细信息,请参阅使用同义词。
- 有关安装这些脚本的详细信息,请参阅 Readme_AdventureWorksScripts。