使用SQL视图的好理由是什么?

Luk*_*101 89 sql sql-server-2008

我正在阅读SQL Server 2008圣经,我正在阅读视图部分.但作者真的没有解释观点的目的.观点有什么用?我应该在我的网站上使用它们,它们有什么好处?

DVK*_*DVK 77

之前的答案似乎没有提到的另一个用途是更容易部署表结构更改.

比如,您希望淘汰包含活动用户数据的表(T_OLD),而是使用具有类似数据的新表(名为T_NEW),但是一个具有活动和非活动用户数据的表,其中一个额外列为"活动".

如果您的系统有大量的查询T_OLD,那么推出有两种选择:

1)Cold Turkey - 更改数据库,同时更改,测试和发布包含所述查询的大量代码.很难做(甚至协调),风险很大.坏.

2)逐步 - 通过创建T_NEW来更改数据库,删除T_OLD,而是创建一个名为T_OLD 的VIEW,它模仿T_OLD表100%(例如视图查询T_NEW).

这样您就可以避免发布当前从T_OLD中选择的任何代码,并进行更改以便在闲暇时将代码从T_OLD迁移到T_NEW.

这是一个简单的例子,还有其他更多涉及.

PS另一方面,您可能应该有一个存储过程API而不是来自T_OLD的直接查询,但情况并非总是如此.

  • 我不知道术语"存储过程API"及相关的优缺点,并发现本文有用:http://www.codinghorror.com/blog/2005/05/stored-procedures-vs-ad-hoc-sql. HTML (2认同)

Dav*_*vid 43

(复制自Google搜索中出现第一个教程,但它具有我自己手动输入的所有好处.)

观点有以下好处:

  • 安全性 - 用户可以访问视图,而无法直接访问基础表.这允许DBA仅向用户提供他们所需的数据,同时保护同一表中的其他数据.
  • 简单性 - 视图可用于隐藏和重用复杂查询.
  • 列名称简化或澄清 - 视图可用于在列名称上提供别名,以使其更具记忆性和/或有意义.
  • 踏脚石 - 视图可以在"多层次"查询中提供垫脚石.例如,您可以创建一个查询视图,该视图计算每个销售人员的销售数量.然后,您可以查询该视图,以按销售人数对销售人员进行分组.


小智 15

维基百科的一些原因:

视图可以提供优于表的优势:

  1. 视图可以表示表中包含的数据的子集
  2. 视图可以将多个表连接并简化为单个虚拟表
  3. 视图可以充当聚合表,数据库引擎聚合数据(总和,平均值等)并将计算结果显示为数据的一部分
  4. 视图可以隐藏数据的复杂性 ; 例如,视图可以显示为Sales2000或Sales2001,透明地分区实际的基础表
  5. 视图占用的空间非常小 ; 数据库仅包含视图的定义,而不包含它呈现的所有数据的副本
  6. 根据所使用的SQL引擎,视图可以提供额外的安全性
  7. 视图可以限制一个或多个表暴露于外部世界的程度


Adr*_*der 14

VIEWS可以用作SELECT/CODE的可重用部分,可以包含在要连接的其他选择/查询中,并使用各种不同的过滤器,而不必每次都重新创建整个SELECT.

这也将逻辑放在一个位置,这样您就不必在代码库中更改它.

看一下

存储过程,函数,视图,触发器,内联SQL之间的选择

视图的主要特点是它在大多数情况下可以像表一样使用,但与表不同,它可以封装非常复杂的计算和常用的连接.除了存储过程之外,它还可以使用db中的几乎任何对象.当您总是需要加入同一组表时,视图最有用,例如带有订单明细的订单,以获取汇总计算字段等.

  • 这样做要非常小心.如果您使用调用其他视图的视图,则可能会造成巨大的性能混乱. (6认同)

dkr*_*etz 9

视图是一个抽象层,它可以完成任何优秀的抽象层,包括封装数据库模式和保护您免受更改内部实现细节的后果.

这是一个界面.