一个数据库包含多个架构,而每个架构则又包含多个对象。可以将架构看作是各种对象的容器,这些对象可以是表(table)、视图(view)、存储过程(stored procedure)等。
可以在架构级别上控制对象的访问权限。例如,可以为一个用户授予某个架构上的SELECT权限,让这个用户能够查询该架构中所有对象的数据。所以,对于决定在架构中如何组织对象,安全性是应该考虑的因素之一。
此外,架构也是一个命名空间,用作对象名称的前缀。例如,假设在架构Sales中有一个Order表,架构限定(schema-qualified)的对象名称是Sales.Orders,也称为两部分对象名称(two-part name)。如果在引用对象时省略架构名称,SQL Server将采用一定的办法来分析出架构名称是什么,例如,检查对象是否在用户的默认架构中,如果不在,再继续检查对象是否在dbo架构中。当在代码中引用对象时,推荐总是使用这种由两部分构成的对象的名称。有时,如果不显示指定架构,那么在解析对象名称时,就会要付出一些没有意义的额外代价。而且,在不同的架构中可能存在名称相同的多个对象,如果这时不显示指定架构,那么最终得到的对象可能并不是你原本想要的。