我正在阅读SQL Server 2008圣经,我正在阅读视图部分。但作者真的没有解释视图的目的。观点有什么用?我应该在我的网站上使用它们吗?它们有什么好处?
答案 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的一些原因:
视图可以提供优于表格的优势:
答案 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)
以下是使用视图而非直接使用表格的许多原因
答案 8 :(得分:1)
一小部分常见原因/用途:
使用它们来更改格式或 “看”数据(即你可以加入一个 名字和姓氏一起)
执行计算或其他查找 关于数据
对数据进行非规范化(从中提取数据) 几个表到一个地方)
答案 9 :(得分:0)
您无法更新视图的基础表并非总是如此。
例如,尝试
创建视图theyshallnotpass作为select * from
并且有一个令人讨厌的惊喜的更新...
(MSSQL)
答案 10 :(得分:-2)
观点是邪恶的!尽可能避免使用它们,并仅出于DVK提到的原因 - 临时数据迁移。
您应该明白,在具有100个表的数据库中,很难记住每个表的用途。现在,如果你在这里添加另外300个视图,它将变得完全混乱。比“View爱好者”倾向于使用嵌套视图,然后在存储过程中使用嵌套视图。我个人现在正在使用数据库,其中有4次深度嵌套的视图! 因此,要了解存储过程的最简单逻辑,我必须首先浏览所有视图。