当前位置:  开发笔记 > 数据库 > 正文

什么是好的观点?

如何解决《什么是好的观点?》经验,为你挑选了8个好方法。

我只是想大致了解RDBMSes中使用的视图.也就是说,我知道一个观点是什么以及如何制作一个观点.我也知道我过去曾用过它们.

但我想确保我彻底了解视图的用处以及视图不应该有用的内容.进一步来说:

    什么是有用的视图?

    在不使用视图的情况下,是否存在使用视图的诱惑?

    为什么要使用视图来代替表值函数,反之亦然?

    是否有任何情况下视图可能有用,乍一看并不明显?

(并且为了记录,其中一些问题是故意天真的.这部分是概念检查.)



1> Lou Franco..:

在某种程度上,视图就像一个界面.您可以根据需要更改基础表结构,但视图为代码提供了一种不必更改的方法.

视图是一种提供简单报告作者的好方法.如果您的业务用户想要从Crystal Reports中访问数据,您可以在他们的帐户中为他们提供一些简化数据的视图 - 甚至可以为他们进行非规范化.



2> 6eorge Jetso..:

1)什么是有用的视图?

IOPO仅在一个地方

•无论您是考虑数据本身还是引用连接表的查询,利用视图都可以避免不必要的冗余.

•视图还提供了一个抽象层,阻止了对表的直接访问(以及由此产生的手铐引用物理依赖性).事实上,我认为提供对基础数据的抽象访问(使用视图和表值函数)是一种好的做法1,包括1等视图我承认有很多"像我说的那样;不是我做"在那个建议;)

CREATE VIEW AS
      SELECT * FROM tblData


2)在不使用视图的情况下,是否存在使用视图的诱惑?

视图连接中的性能曾经是一个问题(例如SQL 2000).我不是专家,但我有一段时间没有担心.(我也无法想到我目前正在使用视图连接的位置.)

视图可能过度杀戮的另一种情况是,视图仅从一个调用位置引用,而可以使用派生表.就像匿名类型比.NET中的类更好,如果匿名类型只使用/引用一次.

    •请参阅http://msdn.microsoft.com/en-us/library/ms177634.aspx中的派生表说明

3)为什么你会使用视图代替表值函数,反之亦然?

(除了性能原因)表值函数在功能上等同于参数化视图.实际上,一个常见的简单表值函数用例只是将WHERE子句过滤器添加到单个对象中的现有视图中.

4)在任何情况下,视图可能是有用的,乍一看并不明显吗?

我无法想到我头顶的任何非明显用途.(我想如果可以,那会让他们显而易见;)







我不同意当它是SELECT*FROM tblData时在表上创建一个视图是有意义的.你能解释为什么这会有益吗?

3> schmoopy..:

视图可用于提供安全性(即:用户可以访问仅访问表中某些列的视图),视图可以为更新,插入等提供额外的安全性.视图还提供了一种别名列名称的方法(如同sp())但是视图更像是与实际表的隔离.



4> Kilhoffer..:

在某种意义上,视图是非规范化的.有时需要非规范化以更有意义的方式提供数据.这是许多应用程序通过对象中的域建模进行的操作.它们有助于以更接近业务角度的方式呈现数据.


他们绝对反规范化.如果你有相关的表被标准化为第三个名词形式,并且你创建了一个"展平"这种关系的视图,那么这不是非规范化的?

5> 小智..:

视图隐藏数据库的复杂性.它们有很多原因,并且在很多情况下都很有用,但是如果您允许用户编写自己的查询和报告,您可以使用它们作为安全措施,以确保它们不会提交设计错误查询使用令人讨厌的笛卡尔联接来删除数据库服务器.



6> CodingWithSp..:

除了其他人所说的内容之外,视图对于从应用程序中删除更复杂的SQL查询也很有用.

例如,而不是在应用程序中执行:

sql ="select a,b from table1 union select a,b from table2";

您可以将其抽象为视图:

创建视图union_table1_table2_v作为
选择a,b从table1
union
选择a,b从table2

并在应用程序代码中,只需:

sql ="从union_table1_table2_v中选择a,b";

此外,如果数据结构发生变化,您将不必更改应用程序代码,重新编译和重新部署.你只需要更改数据库中的视图.


查询越复杂,将来发生变化的可能性就越大,部分原因在于它只会触及更多表格.当数据库结构发生变化时,您还必须更改代码并执行发布.如果在视图中抽象出复杂性,则DBA可能能够对底层表进行结构更改,而无需更改代码.

7> Barry Brown..:

OP询问是否存在使用视图的诱惑,但这是不合适的.

您不想使用视图的是替代复杂的连接.也就是说,不要让程序编程习惯将问题分解成更小的部分,导致您使用多个视图连接在一起而不是一个更大的连接.这样做会破坏数据库引擎的效率,因为它实际上是在执行几个单独的查询而不是一个更大的查询.

例如,假设您必须将表A,B,C和D连接在一起.您可能想要从表A和B以及C&D中的视图中查看视图,然后将两个视图一起加入.在一个查询中加入A,B,C和D要好得多.



8> Joel Coehoor..:

视图可以集中或整合数据.我在哪里,我们在几个不同的链接服务器上有许多不同的数据库.每个数据库都保存不同应用程序的数据.其中一些数据库包含与许多不同应用程序相关的信息.在这种情况下我们要做的是在该应用程序的数据库中创建一个视图,该数据库只从真正存储数据的数据库中提取数据,这样我们编写的查询看起来就不会跨越不同的数据库.

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有