日期:2014-05-16  浏览次数:20405 次

乱谈SQL Server数据库视图

         数据库里存储着大量的数据,但是为了保证数据的安全也为了方便,并不是所有用户的都可浏览所有数据。为此SQL Server里用权限、角色、视图来解决这一系列问题。本篇博客我先介绍视图。

     概念:视图是从一个或多个关联表中派生出的一个虚拟表,换句话说就是以一个或多个表中的部分数据组成的虚拟“表”。

    特点:

           一、分割数据,简化视点:即通过SELECT和WHERE语句来选择你关心的数据,而去除无关的数据。

           二、简化操作:视图可以避免对表的访问和存取操作,同时视图是一个很好的查询窗口。

           三、保护数据:针对用户创建视图,自动屏蔽权限外的数据。

           四、为数据重构提供一定的逻辑独立性:在关系型数据库中数据重构是不可避免的,最常见的是垂直分割为两个表,那么由于表中的数据类型和值并没有改变,所以只要稍微改动视图的定义既可以满足变更之后的表

           五、自动更新:在数据库结构不变的情况下,如果基表中的数据改变,会被自动的反应到视图中

    疑问:对于视图是一个对象,又是“虚拟表”,还具有自动更新的特点,引发了我对视图存储的思考:视图是对象说明视图创建后即被实例化,那么它应该是实际存在于数据库中的,它也确实存在。但是它是虚拟表又怎么解释呢?首先,它只能是以结果集的方式存储,每次打开就打开结果集,但是这样的话如何自动更新;或者是以T-SQL 语句才方式存储,每次打开便执行一次语句,这样就可以解释自动更新了,但问题是视图可能很大每次执行浪费资源。所以这两种存储方式并不科学。

          我查了一些资料,也咨询了学长、学姐,结果是没有结果。但经过讨论我认为,视图应该是以结果集的形式来存储的,同时存在着一种类似于触发器的机制来时时更新视图里的内容。这样的话视图的性质和特点就都可以解释了。当然这只是我的推断,不是事实,写出来只是想寻找答案。

 

5楼linlin80230619昨天 19:44
台湾有个歌手叫乱弹阿翔,你不会是受他真传了吧,[e04]
Re: zhuojiajin昨天 19:45
回复linlin80230619n不知道还有这号人物啊?
4楼liujiahan629629昨天 15:32
乱谈,却收获不小!
Re: zhuojiajin昨天 16:19
回复liujiahan629629n不知道对错的东西,不是收获!
Re: zhuojiajin昨天 17:11
回复zhuojiajinn那也对哈!呵呵
Re: liujiahan629629昨天 19:31
回复zhuojiajinn总比不知道有这东西好!
3楼sunqing0316昨天 15:24
你这不叫乱谈,这叫大胆假设,剩下的就是小心求证~
2楼wangxuhebeibd前天 12:57
写的踏实
Re: zhuojiajin昨天 15:23
回复wangxuhebeibdn这你都能看出来!
1楼sunqing0316前天 11:58
乱弹。。。给你顶一个~