风雪中摇曳,匍匐中前行。 ——致北国的秋与冬
机房收费系统开始好一段时间,我想有写些东西的必要了,纪念这一段旅程。
那么就从前几天的故事说起吧: 视图。
百度百科这么解释,视图是一张虚拟表,其内容由查询定义。同真实的表一样,视图的作用类似于筛选。从用户角度看,一个视图是从一个特定的角度来看数据库的中数据。从数据库系统内部来看,一个视图是由SELECT语句组成的查询定义的虚拟表。从数据库系统内部来看,视图是由一张或多张表中的数据组成的;从数据库系统外部来看,视图如同一张表一样,对表能进行的一般操作可以应用于视图,例如查询,修改,删除等。
在自考和老师的讲课过程中都学过视图,那时候对它只是单纯的概念:视图类似于表,是一张虚拟的表。丈二和尚摸不着头脑。在机房重构中用到了视图,对百度百科的诠释,有种突然的豁然开朗。
说到视图与表,那么它们有什么联系?为什么要用视图呢?
简单地说:视图是按照sql语句或者是在数据中直接生成的虚拟的表,本身不占数据库空间。当对应表里的数据增、删的时候,视图的内容相应变化,即视图的变化随着表的变化而变化。视图是在一张或多张基础表之上建立的表,它的行和列都来源与基本表。
不同的是表有实际的物理记录、占用数据空间,而视图没有,视图的建立与删除对基本表没有影响。
这么说吧,用一个或许不太恰当的比喻:唐僧与他的三个徒弟,对于技能而言,唐僧就相当于一个视图、三个徒弟就相当于各个不同的表,表的内容就是徒弟三人各自的不同的多种本领。唐僧在四天取经中在不同的阶段遇到的困难需要取悟空、八戒、沙僧不同的本领去克服就像一个系统中的某一个功能需要用到不同的表,这时唐僧就充当视图的角色取其所需,而没有必要也不可能在不同的时候建立具有解决这个困难的人(表);过了这个困难,不需要唐僧指挥这个困难的指挥棒,删除这个视图对三徒弟的本领没有任何影响。
听完了有趣的故事,回来看看我们为什么要用视图?
在机房重构中体会到一点就是,为了自己操作的方便把部分数据联系在一起,数据库系统帮助完成查询操作,速度会更快、代码写起来也简单,需要查询多张表的数据时建立视图就只需查询这个视图即可;还有就是不用重复建一张这个功能的表减少数据的冗余等。用术语来说,视图具有简单性、安全性、效率性和独立性。
我们来看一段 是学生上机记录查看的D层代码:
Public Function StuQueryLineRecord(CardNo As String) As List(Of StuLineRecordEntity) Implements IStudent.StuQueryLineRecord Dim sqlhelper As New SqlHelper Dim cmdText As String = "select * from V_StudentLineRecord where cardNo ='" & CardNo & "'" Dim cmdType As CommandType = CommandType.Text Dim parameter As SqlParameter() parameter = {} Dim dt As New DataTable Dim myList As New List(Of Entity.StuLineRecordEntity) dt = sqlhelper.ExecuteSelect(cmdText, cmdType) myList = HelperEntity.convertToList(Of Entity.StuLineRecordEntity)(dt) Return myList End Function
了解了视图及它的好处,看看如何建视图:
打开Sql 2008,在对应的数据下右击“视图”,选择“新建视图”,如图:
然后同时选中需要的用到的表,点击“添加”,如图:
这是直接在数据库中建视图的方法,还有一种用Sql建的,可以参照:http://www.2cto.com/database/201406/311020.html
摇曳中见识了视图,不足之处大家多多指导,路漫漫吾将上下而求索,不知道这个故事好不好听,哈哈。