乱谈SQL Server数据库视图
数据库里存储着大量的数据,但是为了保证数据的安全也为了方便,并不是所有用户的都可浏览所有数据。为此SQL Server里用权限、角色、视图来解决这一系列问题。本篇博客我先介绍视图。
概念:视图是从一个或多个关联表中派生出的一个虚拟表,换句话说就是以一个或多个表中的部分数据组成的虚拟“表”。
特点:
一、分割数据,简化视点:即通过SELECT和WHERE语句来选择你关心的数据,而去除无关的数据。
二、简化操作:视图可以避免对表的访问和存取操作,同时视图是一个很好的查询窗口。
三、保护数据:针对用户创建视图,自动屏蔽权限外的数据。
四、为数据重构提供一定的逻辑独立性:在关系型数据库中数据重构是不可避免的,最常见的是垂直分割为两个表,那么由于表中的数据类型和值并没有改变,所以只要稍微改动视图的定义既可以满足变更之后的表
五、自动更新:在数据库结构不变的情况下,如果基表中的数据改变,会被自动的反应到视图中
疑问:对于视图是一个对象,又是“虚拟表”,还具有自动更新的特点,引发了我对视图存储的思考:视图是对象说明视图创建后即被实例化,那么它应该是实际存在于数据库中的,它也确实存在。但是它是虚拟表又怎么解释呢?首先,它只能是以结果集的方式存储,每次打开就打开结果集,但是这样的话如何自动更新;或者是以T-SQL 语句才方式存储,每次打开便执行一次语句,这样就可以解释自动更新了,但问题是视图可能很大每次执行浪费资源。所以这两种存储方式并不科学。
我查了一些资料,也咨询了学长、学姐,结果是没有结果。但经过讨论我认为,视图应该是以结果集的形式来存储的,同时存在着一种类似于触发器的机制来时时更新视图里的内容。这样的话视图的性质和特点就都可以解释了。当然这只是我的推断,不是事实,写出来只是想寻找答案。
====================================分割线================================
最新内容请见作者的GitHub页:http://qaseven.github.io/
相关文章
- 将数据库从Oracle迁移到SQL Server
- SQL Server数据库高级进阶之事务实战演练
- SQL Server数据库高级进阶之锁实战演练
- SQL Server数据库高级进阶之分布式唯一ID生成实战演练
- SQL Server修改数据库对象所有者(Owner)浅析
- SQL SERVER 属性OWNER不可用于数据库xxx。该对象可能没有此属性,也可能是访问权限不足而无法检索。
- 【转载】SAP_ECC6.0_EHP4或SAP_ECC6.0_EHP5_基于Windows_Server_2008R2_和SQL_server_2008下的安装
- Wing FTP Server与mysql数据库整合
- SQL Server 2005数据库备份与恢复
- Sql Server 导入另一个数据库中的表数据
- SQL Server 2005 查看数据库表的大小 按照表大小排列
- 如何让Activiti-Explorer使用sql server数据库
- 使用SQL Server Profiler跟踪数据库
- SQL Server数据库多种方式查找重复记录
- 如何让Activiti-Explorer使用sql server数据库
- 成功解决:连接sql server时插入数据库内容为乱码,并且输出也为乱码
- Sql Server连接数据库(Windows模式及不用密码及用户名模式)
- sql server 批量备份数据库及删除N天前的备份数据
- [转]MS SQL Server 数据库连接字符串详解
- Linux之SQL Server数据库安装
- sql的介绍——SQL Server数据库管理系统
- Android studio数据如何发送IIS服务器保存SQL Server 2014数据库
- 【SQL Server】数据库开发指南(二)MSSQL数据库开发对于库、表、数据类型、约束等相关操作