当前位置 : 首页 » 互动问答 » 正文

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

分类 : 互动问答 | 发布时间 : 2010-04-21 11:54:25 | 评论 : 11 | 浏览 : 59450 | 喜欢 : 72

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

回答(11)

  • 1楼
  • 之前的答案似乎没有提到的另一个用法是更容易部署表结构更改。

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

    如果您的系统有大量查询 SELECT FROM T_OLD WHERE what ,您有两个选择推出:

    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。

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

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

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

    视图具有以下好处:

    • 安全 - 视图可以使用户无法访问基础表,而无法直接访问基础表。这允许DBA仅向用户提供他们所需的数据,同时保护同一个表中的其他数据。
    • 简单性 - 视图可用于隐藏和重用复杂查询。
    • 列名简化或澄清 - 视图可以是用于在列名上提供别名以使它们更具记忆性和/或有意义。
    • Stepping Stone - 视图可以在“多级”查询中提供跳板。例如,您可以创建一个查询视图,该视图计算每个销售人员的销售数量。然后,您可以查询该视图,以按销售人数对销售人员进行分组。
  • 3楼
  • VIEWS可以用作SELECT / CODE的可重用部分,可以包含在要连接的其他选择/查询中,并使用各种不同的过滤器,而不必每次都重新创建整个SELECT。

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

    查看

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

    一个主要的美丽看来就是这样   在大多数情况下可以像桌子一样使用   情况,但不像表,它可以   封装非常复杂的计算   和常用的连接。它也可以   几乎使用db中的任何对象   除了存储过程。查看   在您总是需要时最有用   加入同一组表说一个   获得订单明细的订单   汇总计算领域等

  • 4楼
  • 来自Wikipedia:

    视图的一些原因可以提供优于表的优点:

    1. 视图可以表示表中包含的数据的子集
    2. 视图可以将多个表连接并简化为单个虚拟表
    3. Views can 的一部分呈现为聚合表,数据库引擎聚合的位置   数据(总和,平均值等)并将计算结果作为数据
    4. Views can 隐藏数据的复杂性;例如,视图可能显示为   Sales2000或Sales2001,透明地划分实际的基础表
    5. Views 占用很少的空间;数据库只包含   视图的定义,而不是它呈现的所有数据的副本
    6. 根据所使用的SQL引擎,视图可以提供一个或多个表的额外安全性
    7. Views can 限制暴露程度外部世界
  • 5楼
  • 视图是一个抽象层,它完成了任何好的抽象层所做的事情,包括封装数据库模式并保护您免受更改内部实现细节的后果。

    这是一个接口。

  • 6楼
  • 以下是使用视图通过某些条件约束实体的一种非常常见的用法。

    表:USERS包含所有用户

    视图:ACTIVE_USERS包含所有用户,不包括被暂停,禁止,等待激活和未满足的用户作为有效要求的一部分,您可以选择在将来定义的任何标准。如果您选择不这样做,则无需从USERS表中删除任何行,因为ACTIVE_USERS始终可以隐藏不需要的行。

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

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

  • 8楼
  • 以下是直接使用视图而不是表格的一些原因

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

    From imexploring.com

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

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

      执行计算或其他查找 on data

      denormalize data(从中提取数据) 几个桌子到一个地方)

  • 10楼
  • 您无法更新视图的基础表并不总是正确的。

    例如,尝试

    创建视图theyshallnotpass作为select * from

    并进行更新以获得令人讨厌的惊喜......

    (MSSQL)

  • 11楼
  • 意见是邪恶的!如果可能请避免使用它们,并仅出于DVK提到的原因 - 临时数据迁移。

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

相关阅读:

How do I find a stored procedure containing <text>?

How can I tell what edition of SQL Server runs on the machine?

How do I limit the number of rows returned by an Oracle query after ordering?

Oracle SQL: Update a table with data from another table

How to insert a value that contains an apostrophe (single quote)?

Count work days between two dates

Equivalent of LIMIT and OFFSET for SQL Server?

SQL update from one Table to another based on a ID match

How can I prevent SQL injection in PHP?

SQL query to select dates between two dates