何时使用数据库视图何时不使用?

时间:2009-03-10 13:37:38

标签: views database-agnostic

这个问题与数据库视图有关,不是物化视图。

优点:

  • 查询简化。
  • 避免在多次查询时重复相同的连接。
  • 避免使用魔法数字。

缺点:

  • 隐藏真实查询(可能是您正在重复加入)。

还有什么?

8 个答案:

答案 0 :(得分:12)

优点: 允许您更改基础数据结构,而不会影响应用程序正在使用的查询(只要您的视图可以隐藏数据结构)

答案 1 :(得分:12)

安全。将视图上的访问权限授予应该能够查看从其返回的列的用户。

答案 2 :(得分:7)

当您不完全信任向数据库发送查询的一方时,视图非常棒。一个很好的例子可能是你会在承包商的桌子上创建一个视图,这样他们所能看到的就是与他们的项目有关的行。

答案 3 :(得分:4)

虽然视图可以隐藏复杂性和多个连接,但这些都是SP中的复杂性。

如果SP可以进行优化,那么应该优化视图,这将导致达到该视图的所有SP的性能提高。

观点非常强大且有用,其中一个原因突出了所有其他非常好的理由。它们减少了代码重复。也就是说,在大多数情况下,底线。如果查询将在三个或更多位置使用,那么如果架构或查询参数发生更改,则视图将极大地简化您的更改。

我曾经编辑过22个存储过程来改变一些查询逻辑。如果原始架构使用了视图,那么我只会进行三次更改。

答案 4 :(得分:3)

现在SQL Server已经common table expressions我发现自己创建了更少的视图。当我创建视图时,它通常用于标准化层次结构,可以在许多查询中使用,而不是替换一个查询。

例如,Region,Market和City可能是三个规范化表(雪花)。我的查询中有90%需要这些数据,因此我将创建一个视图。该视图永远不会替换单个查询,但会使所有其他查询变得简单且干燥。

答案 5 :(得分:1)

我不得不使用几次视图进行奇怪的连接和别名分组。

通过奇怪的连接,我的意思是选择一个不同日期的列表,然后将它们外部连接到它们来自的表,以获得空日的空条目。我无法想出任何其他方式。

至于按别名分组,它似乎取决于别名内部公式的复杂性。如果别名没有引用任何实际列或已经分组的列,则一切正常,但是未包含在分组中的列上的别名会抛出错误。

我似乎记得在大学期间的某个地方读书或听到从一个视图中选择比从一堆连接表中选择要快,但我不知道这是否属实。

使用视图的最后一个优点:Excel中的数据透视表。我认为没有办法连接表,或者至少不在向导界面中。可能可以在Microsoft Query中进行连接,但我还没有尝试过,因为我现在想到了这个想法。

答案 6 :(得分:0)

我以前经常使用它们,现在很少。但是,我通过存储过程访问所有数据,因此视图的有用性稍微少一点,因为SP可以隐藏所需的连接的复杂性。

我仍然考虑使用一个视图,如果有一个特别复杂的很多表的连接,我需要在其上构建许多SP,但说实话,我想不出任何我在现在生产。

另一种情况是,我会使用一种情况,即我的用户可以访问数据库以生成自己的报告,我想隐藏它们的基本复杂性。

答案 7 :(得分:0)

视图比复杂的查询更易于测试。当您想对SQL进行单元测试时,视图就是帮助。