视图对于数据库来说是一个最基本的也是最重要的功能之一数据库视图设计的好坏直接跟数据库的性能相关而且在大型数据库设计中大家分工合作基础表的设计与报表视图的设计往往由不同的人负责所以视图的设计管理跟基础表的设计管理一样都有很大的学问在这篇文章中笔者将结合自己在视图设计管理方面的工作经验谈谈在这方面的一些鲜为人知的技巧
技巧一把基础表与视图脱离开来
一般来说视图都是在基础表的上面建立起来的也就是说要先有基础表而后有视图但是在大型数据库的设计过程中出于项目时间的考虑往往基础表与视图的设计是同时进行的如一些人负责基础表的建立另一些人则负责视图的设计与建立等等在这个过程中往往基础表不存在的时候就需要建立一些视图以加快项目的进度
为了使得基础表的创建和修改与视图的创建于修改没有必然的联系以便于员工之间工作的同步提高工作效率所以在Oracle数据库中提出了一个强制创建视图的概念也就是说正常情况下如果基本表不存在则创建视图就会失败但是我们可以在创建视图的过程中加入一个参数只要创建视图的语法没有错误的话即使基础表不存在仍然可以建立这张表格这个有用的参数就是force选项如我们建立视图时CREATE FORCE VIEW TEXT只需要在关键字VIEW之前加入FORCE参数即可如此的话系统在编译视图的时候就不会去考虑基础表是否存在
不过这里要注意一点若基础表不存在的话则编译后该视图的状态为无效不能再这个视图的基础上执行一些操作如查询操作等等当下次访问这个视图的时候则数据库会对这个视图进行重新编译若此时基础表存在了则该基础表就会变为有效;若基础表不存在则这视图就会失效
Oracle数据库之所以如此设置主要是出于在数据库设计过程中协同办公的需要有了这个功能之后则在数据库建立的过程中只要把数据库基础表与视图设计好之后大家就可以分工合作在数据库中建立相关的对象不然的话要等基础表建立好之后再建立视图如此就会明显的影响数据库建立的进度所以在数据库建立的过程中特别是中大型的数据库系统这是一个很实用的功能
技巧二创建视图的理想步骤
无论是简单视图还是比较复杂的视图笔者觉得数据库管理员在创建视图的时候最好能够遵循一定的步骤这一方面是因为视图的更改相对来说是一件比较麻烦的工作所以我们在建立视图的时候要确保视图的准确性另一方面视图是基础表的一个体现形式若不按步骤来做的话有可能就不能够达到我们预计的需求
当然这个步骤没有官方的版本完全是数据库管理员根据实际的经验总结出来的这个步骤不仅对Oracle数据库有效对于其他数据库来说也是类似的道理
一般来说视图创建可以分为五步走
第一步先考虑Select语句的编写我们知道视图其实就是一个Select语句的集合所以我们建立视图的第一步就是考虑这个Select语句该如何编写这个Select语句编写的是否合理执行效率的高低直接影响着这个视图的性能另外在Select语句中可能还会有格式的控制内容的编排等等如在Select语句中可以把一些字段合并成一个字段;也可以把相关的内容进行倒置等等这些功能都是Select语句完成的所以可以这么说Select语句的编写是视图建立的基础
第二步对这个Select语句进行测试当我们编写好Select语句之后就需要在数据库中执行这条语句看其能否查询到我们想要的值在对Select语句进行测试的时候需要注意一个问题有时候Select查询语句可以查到准确的数据但是在以这条语句建立视图的时候可能就会通不过如在一些表之间的连接查询的时候如果两个表中有个字段名相同是可以的因为他们除了字段名字之外还有表名一起来定义这个字段如Aname与Bname这是不算重名的但是若在建立视图的时候这就会被认为是重复的列明需要对其中的一个列名进行重定义这一点在数据库视图建立的时候要特别的注意
第三步考虑查询结果的准确性通过查询语句把我们想要的结果查询出来后我们就需要看看这个结果是否满足我们的需要在这个过程中我们主要注意两点一是形式字段是否齐全在一些应用系统中若数据库的视图要能够被前台的应用程序调用的话则必须包含一些形式字段如笔者以前在设计一个ERP系统的时候若前台系统要调用数据库中的视图的时候必须包含记录更新时间更新者记录创建时间创建者等相关信息若缺乏这些信息的话则前台调用这张视图的时候就会出现错误故在考虑查询结果准确性的问题的时候就要考虑到前台应用程序的需要看看这些形式字段是否齐全二是实体内容的完整性我们到底需要显示表中的哪些字段呢这个我们在这里要确认清楚若显示内容太多的话则会影响视图的执行效率而且也会降低视图的安全性作用;但是若字段内容显示不足的话则以后要添加字段的话会比较麻烦有一定的工作量所以在这个检验的时候需要根据视图的实际功用确定视图需要显示的内容
第四步视图的修饰有时候为了阅读的方便我们需要对查询结果进行一些修饰如现在有两张表一张是员工基本信息表这表中有员工姓名员工职位编号等等;另一张表是职位基本信息表在这表中有职位编号职位名称我们希望在视图中能够如下显示职位员工名字如数据库工程师Victor也就是说把两个字段合并起来并且在中间加入一个冒号这些格式性的内容都是在查询的时候实现的所以我们确认查询的结果没有错误之后接下来就要确认格式问题若能够在视图中规范这些格式问题则前台的程序设计就会相对来说比较简单
第五步建立视图等到上面四步都确认无误后我们就要根据上面的查询语句来建立视图了不过在这一步过程中也有一些问题需要注意一是视图名字的命名规格我们除了遵循数据库的强制命名格式之外如不能以数字开头等等还需要遵循一些软规则如视图最好能够以V开头跟基础表进行隔开;另外在视图命名中能够根据应用模块的不同来进行分类并体现在视图的名字中这对于我们后续视图的查找都具有非常现实的意义二是虽然可以在视图中直接更新基础表不过为了安全与数据统一的考虑我们这些过来人一般都不建议通过视图来直接更新基础表中的数据虽然数据库提供了类似的功能若要更改相关数据的话则直接去更改基础表的内容为好在建立视图的时候默认情况下是不能够通过视图直接更新基础表