设计和实现视图可谓是数据库物理设计中的一个非常重要的步骤。从一般意义上说,设计和实现视图应该遵循下面的一些建议和原则。
以下内容摘在文档,我对某些重点进行了补充说明(红色部分)
只能在当前数据库中创建视图。 但是,如果使用分布式查询定义视图,则新视图所引用的表和视图可以存在于其他数据库甚至其他服务器中。
分布式视图是可行的,但随着SQL Server本身能力的提高,例如SQL Server 2005开始支持表分区等技术之后,分布式视图应该尽量少用。
所谓分布式视图的一个最大的问题就是将表物理上分开在多个数据库甚至服务器中,这增加了维护和查询的难度
视图名称必须遵循标识符的规则,且对每个架构都必须唯一。 此外,该名称不得与该架构包含的任何表的名称相同。
一个可以借鉴的做法是:在视图名称之前添加一个前缀 vw
您可以对其他视图创建视图。Microsoft SQL Server 允许嵌套视图。但嵌套不得超过 32 层。 根据视图的复杂性及可用内存,视图嵌套的实际限制可能低于该值。
一般不建议超过2层
不能将规则或 DEFAULT 定义与视图相关联。
不能将 AFTER 触发器与视图相关联,只有 INSTEAD OF 触发器可以与之相关联。
除非万不得已,一般不建议使用触发器
定义视图的查询不能包含 COMPUTE 子句、COMPUTE BY 子句或 INTO 关键字。
很多朋友不知道:COMPUTER和COMPUTER BY语句仅仅用于一些特殊场合,用于生成总计行。大致有如下的效果
该特性不能用于视图,但可以直接用于查询
定义视图的查询不能包含 ORDER BY 子句,除非在 SELECT 语句的选择列表中还有一个 TOP 子句。
这个很有意思,如果要访问所有的呢,还必须是写TOP 100 PERCENT
定义视图的查询不能包含指定查询提示的 OPTION 子句。
定义视图的查询不能包含 TABLESAMPLE 子句。
关于TABLESAMPLE语句,大家可能也比较陌生,这是一个用于对数据进行抽样的。它和TOP语句不同,TOP语句是有固定大小的,而TABLESAMPLE返回的数据,可能多,可能少,甚至可能没有。