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

时间:2010-04-21 03:54:25

标签: sql sql-server-2008

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

11 个答案:

答案 0 :(得分:71)

以前的答案似乎没有提到的另一种用法是更容易部署表结构更改。

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

如果您的系统有SELECT whatever FROM T_OLD WHERE whatever的大量查询,则您有两种推广选择:

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

2)渐进 - 通过创建T_NEW来更改数据库,删除T_OLD,而是创建一个名为T_OLD的 VIEW ,它模仿T_OLD表100%(例如视图查询为SELECT all_fields_except_active FROM T_NEW WHERE active=1)。

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

这是一个简单的例子,还有其他更多的参与。

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

答案 1 :(得分:39)

(从first tutorial that came up in a Google search复制,但它具有我自己手动输入的所有好处。)

  

观点具有以下好处:

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

答案 2 :(得分:15)

Wikipedia的一些原因:

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

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

答案 3 :(得分:13)

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

这也将逻辑放在一个位置,这样您就不必在整个代码库中进行更改。

看看

Choice Between Stored Procedures, Functions, Views, Triggers, Inline SQL

  

观点的主要之处在于它   在大多数情况下可以像桌子一样使用   情况,但不像表,它可以   封装非常复杂的计算   和常用的连接。它也可以   几乎使用数据库中的任何对象   除了存储过程。查看   在你总是需要时最有用   加入同一组表说一个   获得订单明细的订单   汇总计算字段等。

答案 4 :(得分:9)

视图是一个抽象层,它执行任何好的抽象层所做的事情,包括封装数据库模式并保护您免受更改内部实现细节的后果。

这是一个界面。

答案 5 :(得分:3)

以下是使用视图通过某些标准约束实体的一种非常常见的用法。

表:USERS包含所有用户

查看:ACTIVE_USERS包含所有用户,不包括那些被暂停,禁止,等待激活且未满足您将来可能选择定义的任何条件的用户,作为活动要求的一部分。如果您选择不这样做,则无需从USERS表中删除任何行,因为ACTIVE_USERS始终可以隐藏不需要的行。

这样,您可以在用户管理页面中使用该表,但应用程序的其余部分可以使用ACTIVE_USERS,因为它们可能是唯一能够执行进程和访问/修改数据的用户。

答案 6 :(得分:2)

视图可以允许您组合来自多个不同表的数据并对其进行格式化(组合字段,提供更有意义的字段名称等),以便最终用户更容易。它们是数据库模型的抽象。它们还可用于为用户提供对表中数据的访问权限,而无需直接访问表本身。

答案 7 :(得分:2)

以下是使用视图而非直接使用表格的许多原因

  • 简单性 - 视图可用于隐藏复杂查询。
  • 安全性 - 视图可以通过在某些选定列上创建视图来隐藏最终用户的一些重要信息
  • 安全性 - 使用VIEW更改其结构的安全表。
  • 冗余 - 使用公共视图减少每个过程/查询中的冗余代码。
  • 计算 - 所有计算都可以在视图查询中完成一次。
  • 有意义的名称 - 表可能具有id的名称,如tbl_org_emp_id,其名称可以是[Employee No]或一些有意义的名称。

来自imexploring.com

答案 8 :(得分:1)

一小部分常见原因/用途:

  • 使用它们来更改格式或 “看”数据(即你可以加入一个 名字和姓氏一起)

    执行计算或其他查找 关于数据

    对数据进行非规范化(从中提取数据) 几个表到一个地方)

答案 9 :(得分:0)

您无法更新视图的基础表并非总是如此。

例如,尝试

创建视图theyshallnotpass作为select * from

并且有一个令人讨厌的惊喜的更新...

(MSSQL)

答案 10 :(得分:-2)

观点是邪恶的!尽可能避免使用它们,并仅出于DVK提到的原因 - 临时数据迁移。

您应该明白,在具有100个表的数据库中,很难记住每个表的用途。现在,如果你在这里添加另外300个视图,它将变得完全混乱。比“View爱好者”倾向于使用嵌套视图,然后在存储过程中使用嵌套视图。我个人现在正在使用数据库,其中有4次深度嵌套的视图! 因此,要了解存储过程的最简单逻辑,我必须首先浏览所有视图。