Med*_*Man 257 sql t-sql database sql-server
何时以及为什么有人决定他们需要在他们的数据库中创建一个View?为什么不运行正常的存储过程或选择?
Dav*_*ile 453
视图提供了几个好处.
1.视图可以隐藏复杂性
如果您的查询需要连接多个表,或者具有复杂的逻辑或计算,则可以将所有逻辑编码到视图中,然后从视图中选择,就像您在表中一样.
2.视图可以用作安全机制
视图可以从表中选择某些列和/或行,并在视图上设置权限而不是基础表.这允许仅显示用户需要查看的数据.
3.视图可以简化支持遗留代码
如果您需要重构一个会破坏大量代码的表,您可以使用相同名称的视图替换该表.该视图提供与原始表完全相同的模式,而实际模式已更改.这使得引用该表的遗留代码不会中断,允许您随意更改遗留代码.
这些只是视图如何有用的众多示例中的一部分.
Gra*_*row 85
除此之外,它还可用于安全性.如果您有"客户"表,您可能希望让所有销售人员访问名称,地址,邮政编码等字段,但不能访问credit_card_number.您可以创建仅包含他们需要访问的列的视图,然后授予他们对视图的访问权限.
And*_*are 38
视图是查询的封装.变成视图的查询往往很复杂,因此将它们保存为重用视图可能是有利的.
cms*_*sjr 28
我通常会创建视图以对通常用于报告目的的数据进行反规范化和/或聚合.
编辑
通过详细说明,如果我有一个数据库,其中一些实体是人,公司,角色,所有者类型,订单,订单详细信息,地址和电话,其中人员表存储员工和联系人以及地址和电话表为个人和公司存储电话号码,开发团队的任务是生成报告(或使非开发人员可以访问报告数据),例如员工销售,客户销售或按地区销售,按月销售,国家等的客户我会创建一组视图,这些视图对数据库实体之间的关系进行去规范化,以便可以获得真实世界实体的更集成的视图(没有双关语).一些好处可能包括:
HLG*_*GEM 11
有几个原因:如果你有复杂的连接,有时最好有一个视图,这样任何访问都会使连接正确,开发人员不必记住他们可能需要的所有表.通常,这可能适用于财务应用程序,其中所有财务报告都基于同一组数据非常重要.
如果您有用户要限制他们可以看到的记录,您可以使用视图,只允许他们访问视图而不是基础表,然后查询视图
Crystal报表似乎更喜欢将视图用于存储过程,因此执行大量报表编写的人倾向于使用大量视图
在重构数据库时,视图也非常有用.您通常可以隐藏更改,以便旧代码不会通过创建视图来查看它.阅读重构数据库,看看它是如何工作的,因为它是一种非常强大的重构方法.
视图存储过程的一个主要优点是,您可以像使用表一样使用视图.即,视图可以直接在FROM查询的子句中引用.例如,SELECT * FROM dbo.name_of_view.
几乎所有其他方式,存储过程都更强大.您可以传递参数,包括out参数,让你有效地在一次返回多个值,你可以做SELECT,INSERT,UPDATE,和DELETE操作,等等,等等
如果您希望View能够在FROM子句中进行查询,但您也希望能够传入参数,那么还有一种方法可以执行此操作.它被称为表值函数.
这是一篇关于这个主题的非常有用的文章:
编辑:顺便说一句,这种问题提出了一个问题,一个视图对表值函数有什么优势?我没有一个非常好的答案,但我会注意到创建视图的T-SQL语法比表值函数更简单,数据库的用户可能更熟悉视图.
它可以作为你的ORM和你的桌子之间的一个好"中间人".
例:
我们有一个Person表,我们需要更改它上面的结构,因此SomeColumn列将被移动到另一个表,并且将具有一对多的关系.
但是,对于Person而言,大多数系统仍然使用SomeColumn作为单一事物,而不是很多东西.我们使用一个视图将所有SomeColumns放在一起并将其放在视图中,这很好地完成了.
这是因为数据层已更改,但业务需求没有根本改变,因此业务对象不需要更改.如果业务对象必须改变,我认为这不是一个可行的解决方案,但是视图肯定是一个很好的中间点.
这是两个常见原因:
您可以将其用于安全性。在主表上不授予任何权限,并创建限制列或行访问的视图,并向用户授予权限以查看该视图。
您可以方便地使用它。将视图中一直使用的一些表连接在一起。这可以使查询一致且容易。
小智 5
专注于特定数据 视图允许用户专注于他们感兴趣的特定数据以及他们负责的特定任务。不需要的数据可以被排除在视图之外。这也增加了数据的安全性,因为用户只能看到视图中定义的数据,而看不到基础表中的数据。有关出于安全目的使用视图的更多信息,请参阅将视图用作安全机制。
简化数据操作 视图可以简化用户操作数据的方式。您可以将常用的连接、投影、UNION 查询和 SELECT 查询定义为视图,这样用户就不必在每次对该数据执行附加操作时指定所有条件和限定。例如,用于报告目的并执行子查询、外部联接和聚合以从一组表中检索数据的复杂查询可以创建为视图。视图简化了对数据的访问,因为不必在每次生成报告时编写或提交底层查询;而是查询视图。有关操作数据的更多信息。
您还可以创建在逻辑上作为参数化视图或在 WHERE 子句搜索条件中具有参数的视图的内联用户定义函数。有关更多信息,请参阅内联用户定义函数。
自定义数据 视图允许不同的用户以不同的方式查看数据,即使他们同时使用相同的数据。当具有许多不同兴趣和技能水平的用户共享同一个数据库时,这尤其有利。例如,可以创建一个视图,该视图仅检索与客户经理打交道的客户的数据。该视图可以根据使用该视图的客户经理的登录 ID 来确定要检索哪些数据。
导出和导入数据 视图可用于将数据导出到其他应用程序。例如,您可能希望使用 pubs 数据库中的商店和销售表来使用 Microsoft® Excel 分析销售数据。为此,您可以创建基于商店和销售表的视图。然后可以使用 bcp 实用程序导出视图定义的数据。还可以使用 bcp 实用程序或 BULK INSERT 语句将数据从数据文件导入某些视图,前提是可以使用 INSERT 语句将行插入到视图中。有关将数据复制到视图的限制的更多信息,请参阅 INSERT。有关使用 bcp 实用程序和 BULK INSERT 语句将数据复制到视图和从视图复制数据的详细信息,请参阅复制到视图或从视图复制。
合并分区数据 Transact-SQL UNION 集合运算符可在视图中使用,以将来自不同表的两个或多个查询的结果合并为一个结果集。这在用户看来是一个称为分区视图的表。例如,如果一个表包含华盛顿的销售数据,而另一个表包含加利福尼亚的销售数据,则可以从这些表的 UNION 创建一个视图。该视图表示两个地区的销售数据。要使用分区视图,您需要创建几个相同的表,指定一个约束来确定可以添加到每个表的数据范围。然后使用这些基表创建视图。查询视图时,SQL Server 自动确定哪些表受查询影响并仅引用这些表。例如,如果查询指定仅需要华盛顿州的销售数据,则 SQL Server 仅读取包含华盛顿州销售数据的表;没有访问其他表。
分区视图可以基于来自多个异构源的数据,例如远程服务器,而不仅仅是同一数据库中的表。例如,要合并来自不同远程服务器的数据,每个服务器都存储组织不同区域的数据,您可以创建从每个数据源检索数据的分布式查询,然后基于这些分布式查询创建视图。任何查询仅从包含查询请求的数据的远程服务器上的表中读取数据;视图中分布式查询引用的其他服务器不被访问。
当您跨多个表或多个服务器对数据进行分区时,仅访问一小部分数据的查询可以运行得更快,因为要扫描的数据较少。如果表位于不同的服务器上,或者在多处理器的计算机上,也可以并行扫描查询中涉及的每个表,从而提高查询性能。此外,维护任务(例如重建索引或备份表)可以更快地执行。通过使用分区视图,数据仍然显示为单个表,并且可以这样查询,而无需手动引用正确的基础表。
如果满足以下任一条件,则分区视图是可更新的: 在具有支持 INSERT、UPDATE 和 DELETE 语句的逻辑的视图上定义了 INSTEAD OF 触发器。
视图和 INSERT、UPDATE 和 DELETE 语句都遵循为可更新分区视图定义的规则。有关更多信息,请参阅创建分区视图。
https://technet.microsoft.com/en-us/library/aa214282(v=sql.80).aspx#sql:join
| 归档时间: |
|
| 查看次数: |
194689 次 |
| 最近记录: |