sql 2005 架构介绍
一、什么是架构?
架构是形成单个命名空间的数据库实体的集合。命名空间是一个集合,其中每个元素的名称都是唯一的。
例如,为了避免名称冲突,同一架构中不能有两个同名的表。两个表只有在位于不同的架构中时才可以同名。
二、与sql 2000的区别
1、在 SQL Server 2000 中,数据库用户和架构是隐式连接在一起的。每个数据库用户都是与该用户同名的架构的所有者。对象的所有者在功能上与包含它的架构所有者相同。因而,SQL Server 2000 中的完全限定名称的“架构”也是数据库中的用户。因此,从 SQL Server 2000 数据库中删除用户之前,管理员需要删除该用户所拥有的所有对象或更改这些对象的所有者
2、在 SQL Server 2005 ,架构独立于创建它们的数据库用户而存在.
三、用户架构分离的好处
将架构与数据库用户分离对管理员和开发人员而言有下列好处:
1、多个用户可以通过角色成员身份或 Windows 组成员身份拥有一个架构。这扩展了允许角色和组拥有对象的用户熟悉的功能。
2、极大地简化了删除数据库用户的操作。
3、删除数据库用户不需要重命名该用户架构所包含的对象。因而,在删除创建架构所含对象的用户后,不再需要修改和测试显式引用这些对象的应用程序。
4、多个用户可以共享一个默认架构以进行统一名称解析。
5、开发人员通过共享默认架构可以将共享对象存储在为特定应用程序专门创建的架构中,而不是 DBO 架构中。
现在访问数据库对象的完全限定的对象名称现在包含四部分:
server.database.schema.object。
用户始终拥有一个默认架构如果在创建用户时未指定默认架构,则默认架构为 dbo。
该默认架构是服务器解析 DML 或 DDL 语句中指定的未限定的对象名称时搜索的架构。因此,当引用的对象包含在默认架构中时,不需要指定架构名。例如,如果 table_name 包含在默认架构中,则语句“SELECT * FROM table_name”可以成功执行。
若要访问非默认架构中的对象,则必须至少指定一个由两部分构成的标识符 (schema_name.object_name)。引用架构范围内的对象的所有 DDL 和 DML 语句都必须符合此要求。
我们看个例子:
use AdventureWorks
--看一下dbo默认的架构是什么
select name,default_schema_name
from sys.database_principals
where name='dbo'
--执行结果
--name default_schema_name
--dbodbo
--我们看一下属于dbo架构的表
select schema_name(schema_id)as sch ,* from sys.all_objects
where schema_name(schema_id)='dbo' and type='u'
--结果如下
--dboAWBuildVersion149575571NULL1
--dboDatabaseLog2073058421NULL1
--dboErrorLog2105058535NULL1
--可以使用如下语句查询
select * from DatabaseLog
--如果执行不是属于dbo架构的对象,将会出现错误
select * from all_objects
--消息 208,级别 16,状态 1,第 1 行
--对象名 'all_objects' 无效。
--语句需要这样写
select * from sys.all_objects