视图的优点与缺点

在程序设计的时候必须先了解视图的优缺点,这样可以扬长避短,视图具有如下的一些优点:

● 简单性。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使用户不必为以后的操作每次都指定全部的条件。

● 安全性。通过视图用户只能查询和修改他们所能见到的数据。数据库中的其他数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。通过视图,用户可以被限制在数据的不同子集上。

● 逻辑数据独立性。视图可以使应用程序和数据库表在一定程度上独立。如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。

视图也存在一些缺点,主要如下。

● 性能:SQL Server必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,SQL Server也把它变成一个复杂的结合体,需要花费一定的时间。

● 修改限制:当用户试图修改视图的某些行时,SQL Server必须把它转化为对基本表的某些行的修改。对于简单视图来说,这是很方便的,但是,对于比较复杂的视图,可能是不可修改的。

所以,在定义数据库对象时,不能不加选择地来定义视图,应该权衡视图的优点和缺点,合理地定义视图。

 

首先视图可以将不同表中的数据通过关联实现多表数据输出,比如说,

有一个类型表 tb_type,有字段tId,tName,

有个产品表 tb_roduct,有字段pId,pName,tId,

此时你可以通过建立一张视图vProduct将产品表和产品类型一起输出
SELECT p.pId AS 产品编号,p.pName AS 产品名称,p.tId AS 产品类型编号,t.tName AS 类型名称
FROM tb_roduct AS p INNER JOIN tb_type AS t ON p.tId = t.tId;

这样就可以在程序里使用
SELECT * FROM vProduct 来做产品资料的查询了
它可以减少我们编码的工作量,也方便维护。

 

刷新全部视图


SELECT N'EXEC sp_refreshview '

     
+ QUOTENAME(VIEW_NAME, ''''+ ';' AS cmd

FROM (SELECT QUOTENAME(TABLE_SCHEMA)

       
+ N'.' + QUOTENAME(TABLE_NAME) AS VIEW_NAME

     
FROM INFORMATION_SCHEMA.VIEWS) AS V

WHERE OBJECTPROPERTY(OBJECT_ID(VIEW_NAME), 'IsSchemaBound'= 0