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


当前回答

我正在创建xxx,映射主表(如Products表)和引用表(如ProductType或ProductDescriptionByLanguage)之间的所有关系。这将创建一个视图,允许我检索产品及其从外键转换到描述的所有详细信息。 然后我可以使用ORM创建对象,轻松地构建网格、组合框等。

其他回答

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

视图提供了几个好处。

1. 视图可以隐藏复杂性

如果您有一个需要连接几个表的查询,或者有复杂的逻辑或计算,您可以将所有这些逻辑编码到一个视图中,然后像处理表一样从视图中进行选择。

2. 视图可以用作一种安全机制

视图可以从一个(或多个)表中选择某些列和/或行,并在视图上而不是在底层表上设置权限。这允许只显示用户需要查看的数据。

3.视图可以简化对遗留代码的支持

如果您需要重构一个会破坏大量代码的表,您可以用同名的视图替换这个表。视图提供了与原始表完全相同的模式,而实际的模式已经更改。这可以防止引用表的遗留代码中断,允许您在空闲时更改遗留代码。

这些只是展示视图如何有用的众多示例中的一些。

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

视图还将非常复杂的配置和表分解为易于查询的可管理块。在我们的数据库中,整个表管理系统被分解为来自一个大表的视图。

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

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