什么时候以及为什么有些人决定他们需要在他们的数据库中创建一个视图?为什么不运行一个普通的存储过程或选择?


当前回答

在对遗留数据库进行报告时,视图可能是天赐之物。特别是,您可以使用有意义的表名,而不是神秘的字母名(其中两个字母是常见的前缀!),或者充满缩写的列名,我确信这在当时是有意义的。

其他回答

当我只运行查询时,我喜欢在存储过程上使用视图。视图还可以简化安全性,可用于简化对多个表的插入/更新,并可用于快照/物化数据(运行长时间运行的查询,并保持结果缓存)。

我使用物化视图来执行不需要实时保持准确的查询。

在对遗留数据库进行报告时,视图可能是天赐之物。特别是,您可以使用有意义的表名,而不是神秘的字母名(其中两个字母是常见的前缀!),或者充满缩写的列名,我确信这在当时是有意义的。

一般来说,我使用视图是为了让生活更简单,从存储在多个表中的实体中获得扩展细节(消除代码中的大量连接以增强可读性),有时还可以在多个数据库中共享数据,甚至可以使插入更容易阅读。

它可以作为ORM和表之间的“中间人”。

例子:

我们有一个Person表,我们需要改变它的结构,以便将SomeColumn列移动到另一个表,并与之有一对多的关系。

然而,系统的大多数情况下,就Person而言,仍然将SomeColumn作为一个单独的东西使用,而不是很多东西。我们使用一个视图将所有的SomeColumns聚集在一起,并将其放在视图中,效果很好。

这是可行的,因为数据层发生了变化,但业务需求没有根本变化,因此业务对象不需要更改。如果业务对象必须改变,我不认为这是一个可行的解决方案,但视图绝对是一个很好的中间点。

这样做的原因不止一个。有时可以使通用连接查询变得简单,因为可以只查询表名而不是执行所有的连接。

另一个原因是将数据限制为不同的用户。例如:

表1:列- USER_ID;用户名;SSN

管理用户可以在实际表上有私权,但你不想访问的用户,比如SSN,你创建一个视图

CREATE VIEW USERNAMES AS SELECT user_id, username FROM Table1;

然后给他们访问视图而不是表的私权。