视图运用场景

一缕青烟 2011-07-30 09:30:26
虽然说每种实物都有它存在的理由,视图也是如此。

但我还是没用视图的习惯,虽然它的优点有:
1.增强可读性
2.数据安全及保密:针对不同用户,可以创建不同视图,限制其所能浏览和编辑的数据内容。
3.降低 查询复杂度
4.方便维护。

好像这些表值函数也能做到。

并且当表更新的同时,也要更新视图,如果视图是经过一系列复杂运算得来,那岂不是在每次更新表的同时增加了服务器负担。而表值函数只有你在需要这些数据的时候才批量预算。

我牵强附会的想了一个运用视图的最主要场景,不知道是否正确。
一个非常庞大的数据集,来源与多个表的数据(数据量很大),这些表不希望经常被大规模调用。并且还有可能要对这个数据集进行进一步复杂的加工。
...全文
215 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
claro 2011-07-30
  • 打赏
  • 举报
回复
从安全性上考虑,可能会用到。
cd731107 2011-07-30
  • 打赏
  • 举报
回复
视图是不能带参数的,怎么差指定月的销售额,如果是 select * from view where 时间=本月
这样的话也觉得不妥。如果在定义视图的就指定。那岂不是每次都要在SQL 里面更改视图?

是这样操作的: select * from view where 时间 between 某天 and 某天
一缕青烟 2011-07-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cd731107 的回复:]
视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。分布式查询也可用于定义使用多个异类源数据的视图。如果有几台不同的服务器分……
[/Quote]

视图是不能带参数的,怎么差指定月的销售额,如果是 select * from view where 时间=本月
这样的话也觉得不妥。如果在定义视图的就指定。那岂不是每次都要在SQL 里面更改视图?
一缕青烟 2011-07-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liangck 的回复:]
表更新的同时,也要更新视图,什么意思。
除了索引视图外,视图不会存储数据。
[/Quote]

我更新的意思并不是对真正意义上数据的更新。 可以说是刷新虚拟表把。
cd731107 2011-07-30
  • 打赏
  • 举报
回复
视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。分布式查询也可用于定义使用多个异类源数据的视图。如果有几台不同的服务器分别存储组织中不同地区的数据,而您需要将这些服务器上相似结构的数据组合起来,这种方式就很有用。
通过视图进行查询没有任何限制,通过它们进行数据修改时的限制也很少。
权限方面:
视图可以隐藏基表。
可以禁止所有用户访问数据库表,而要求用户只能通过视图操作数据。这种方法可以保护用户和应用程序不受某些数据库修改的影响。例如,如果可以创建一个名为 "本月销售额 "的视图。在每月的第一天,可以相应地修改视图的定义。如果没有这个视图,用户每月都必须重新编写查询以选择相应月份的销售额。
将用户限定在表中的特定行上。
例如,只允许雇员看见工作跟踪表内记录其工作的行。
将用户限定在特定列上。
例如,对于那些不负责处理工资单的雇员,只允许他们看见雇员表中的姓名列、办公室列、工作电话列和部门列,而不能看见任何包含工资信息或个人信息的列。
将多个表中的列联接起来,使它们看起来象一个表。
聚合信息而非提供详细信息。
例如,显示一个列的和,或列的最大值和最小值。

1、单源表视图
视图的数据可以只取自一个基本表的部分行、列,这样的视图行列与基本表行列对应。这样定义的视图一般可以进行查询和更改数据操作。
2、多源表视图
视图的数据可以来自多个表中,这样定义的视图一般只用于查询,不用于修改数据。
3、在已有视图上定义的新视图
可以在视图上再建立视图,这时作为数据源的视图必须是已经建立好的。
4、带表达式的视图
在定义基本表时,为减少数据库中的冗余数据,表中只存放基本数据,由基本数据经过各种计算派生出的数据一般是不存储的。但由于视图中的数据并不实际存储,所以定义视图时可以根据需要设置一些派生属性列,在这些派生属性列中保存经过计算的值。这些派生属性由于在基本表中并不实际存在,因此,也称它们为虚拟列。包含虚拟列的视图也称为带表达式的视图。
5、含分组统计信息的视图
含分组统计信息的视图是指定义视图的查询语句中含有GROUP BY子句,这样的视图只能用于查询,不能用于修改数据。
liangCK 2011-07-30
  • 打赏
  • 举报
回复
表更新的同时,也要更新视图,什么意思。
除了索引视图外,视图不会存储数据。
  • 打赏
  • 举报
回复
看看~
新丁11111 2011-07-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cd731107 的回复:]
视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。分布式查询也可用于定义使用多个异类源数据的视图。如果有几台不同的服务器分……
[/Quote]
相当全面,主要是看你对于需求的应用

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧