什么时候以及为什么有些人决定他们需要在他们的数据库中创建一个视图?为什么不运行一个普通的存储过程或选择?
当前回答
为了安全性:仅允许每个用户通过包含用户或用户组有权查看的特定数据的一小组视图访问数据库,限制用户对其他数据的访问。
查询和结构的简单性:视图可以从多个表中提取数据并呈现单个表,简化信息并将多表查询转换为视图的单表查询,它为用户提供数据库结构的特定视图,将数据库呈现为特定用户或用户组的一组虚拟表。
为了创建一致的数据库结构:即使底层源表发生了更改,视图也会显示一致的、未更改的数据库结构映像。
其他回答
这样做的原因不止一个。有时可以使通用连接查询变得简单,因为可以只查询表名而不是执行所有的连接。
另一个原因是将数据限制为不同的用户。例如:
表1:列- USER_ID;用户名;SSN
管理用户可以在实际表上有私权,但你不想访问的用户,比如SSN,你创建一个视图
CREATE VIEW USERNAMES AS SELECT user_id, username FROM Table1;
然后给他们访问视图而不是表的私权。
在对遗留数据库进行报告时,视图可能是天赐之物。特别是,您可以使用有意义的表名,而不是神秘的字母名(其中两个字母是常见的前缀!),或者充满缩写的列名,我确信这在当时是有意义的。
我正在创建xxx,映射主表(如Products表)和引用表(如ProductType或ProductDescriptionByLanguage)之间的所有关系。这将创建一个视图,允许我检索产品及其从外键转换到描述的所有详细信息。 然后我可以使用ORM创建对象,轻松地构建网格、组合框等。
我们创建view来限制或严格访问表中的所有行/列。如果所有者希望只有特定或有限的行/列需要共享,那么他将使用这些列创建一个视图。
一般来说,我使用视图是为了让生活更简单,从存储在多个表中的实体中获得扩展细节(消除代码中的大量连接以增强可读性),有时还可以在多个数据库中共享数据,甚至可以使插入更容易阅读。
推荐文章
- NVL和Coalesce之间的Oracle差异
- 在SQL server查询中将NULL替换为0
- 在SQL中修改表的模式名
- 如何得到累计和
- 如何在SQL Server 2005的一条语句中更新两个表?
- 如何创建临时表与SELECT * INTO tempTable从CTE查询
- 用于查找计数为>的记录的SQL查询
- “从Table1左连接Table2”和“从Table2右连接Table1”可以互换吗?
- 在SQL Server的选择语句中使用带TOP的变量,而不是动态的
- SQL变量保存整数列表
- 自然连接和内部连接的区别
- MySQL现在()+1天
- 在SQL中转换月号到月名函数
- 不可重复读和幻影读的区别是什么?
- 改变一个varchar列的最大长度?