什么时候以及为什么有些人决定他们需要在他们的数据库中创建一个视图?为什么不运行一个普通的存储过程或选择?
当前回答
以下是两个常见的原因:
你可以用它来保证安全。在主表上不授予权限,创建限制列或行访问的视图,并向用户授予查看视图的权限。
你可以为了方便使用它。将视图中经常使用的一些表连接在一起。这可以使查询保持一致并更容易。
其他回答
一般来说,我使用视图是为了让生活更简单,从存储在多个表中的实体中获得扩展细节(消除代码中的大量连接以增强可读性),有时还可以在多个数据库中共享数据,甚至可以使插入更容易阅读。
我们创建view来限制或严格访问表中的所有行/列。如果所有者希望只有特定或有限的行/列需要共享,那么他将使用这些列创建一个视图。
我认为第一个。隐藏查询的复杂性。它非常适合于视图。当我们规范化数据库表时如何增加。现在,当表数量增加时,获取数据是非常困难的。所以最好的处理方法是遵循视图。如果我错了,请纠正我。
视图相对于存储过程的一个主要优点是,您可以像使用表一样使用视图。也就是说,可以在查询的FROM子句中直接引用视图。例如,SELECT * FROM dbo.name_of_view。
在几乎所有其他方面,存储过程都更强大。你可以传入参数,包括输出参数,让你一次有效地返回几个值,你可以做SELECT, INSERT, UPDATE和DELETE操作,等等。
如果你想要一个View能够从from子句中进行查询,但你也想要能够传入参数,也有一种方法可以做到这一点。它叫做表值函数。
这里有一篇关于这个主题的非常有用的文章:
http://databases.aspfaq.com/database/should-i-use-a-view-a-stored-procedure-or-a-user-defined-function.html
编辑:顺便说一下,这就提出了一个问题,视图比表值函数有什么优势?对此,我没有一个很好的答案,但我要指出,创建视图的T-SQL语法比创建表值函数要简单,数据库用户可能更熟悉视图。
我正在创建xxx,映射主表(如Products表)和引用表(如ProductType或ProductDescriptionByLanguage)之间的所有关系。这将创建一个视图,允许我检索产品及其从外键转换到描述的所有详细信息。 然后我可以使用ORM创建对象,轻松地构建网格、组合框等。
推荐文章
- 如何在Ruby On Rails中使用NuoDB手动执行SQL命令
- 查询JSON类型内的数组元素
- 确定记录是否存在的最快方法
- 获得PostgreSQL数据库中当前连接数的正确查询
- 在SQL选择语句Order By 1的目的是什么?
- MySQL数据库表中的最大记录数
- 从现有模式生成表关系图(SQL Server)
- 我如何循环通过一组记录在SQL Server?
- HyperLogLog算法是如何工作的?
- 数据库和模式的区别
- 如何在SQL Server中一次更改多个列
- 如何从命令行通过mysql运行一个查询?
- 外键约束可能导致循环或多条级联路径?
- 使用LIMIT/OFFSET运行查询,还可以获得总行数
- 当恢复sql时,psql无效命令\N