前期工作一定义标准的对象命名规范
一定要定义数据库对象的命名规范这是笔者一再坚持的一个观点在开发数据库项目之前项目开发团队要先讨论确定数据库对象的命名规范包括函数过程表视图字段等的命名规则因为我们在数据库开发过程中会重复的引用这些对象若没有一个统一的命名规则只有对象的所有者知道其所代表的含义那么其他数据库开发人员想引用某个对象的时候就会茫然不知道从何下手所以制定一个统一的数据库对象命名规范这是数据库设计的一个必要的前期准备工作
利用前缀区分各个对象在Oracle数据库中基本的对象有函数过程表视图等等对于表以外的对象笔者建议通过前缀来对他们进行区分如函数名就用FUN前缀视图就用View前缀等等如此当在其他对象中调用视图或者函数的时候就可以通过输入View前缀让数据库系统只列出数据库当前的所有视图对象通过这种方法就是缩小我们选择的范围提高对象引用的效率
可以根据不同的功能模块来对基础表进行命名如对于ERP来说光基础表就有上千张这么多的表如何进行有序的管理?笔者建议可以按软件功能模块的简称作为其前缀如对于财务模块用到的基础表可以利用FI前缀;销售模块涉及到的基础表则采用SA前缀通过这种命名规则一看到前缀就可以联想到表的用途无疑这可以提高表命名的可读性;也方便数据库开发人员对表对象的引用
对于字段来说命名规范所涉及到的技巧更加多了如笔者常常会在一些字段的后面加入一个后缀表示这个字段所对应的数据类型如订单数量是一个典型的数字类型字段则笔者会在后面加入NUM后缀这么处理后当他们要在其他对象中引用这个字段的时候就不用费心的去想去找资料确定这个字段的数据类型了如在设置字段列名的时候笔者喜欢把表的前缀加入到字段名中如现在销售订单中有个销售订单ID的字段笔者把它命名为Or_Order_ID;在出货单上也需要用到这个字段笔者命名为OU_Order_ID当我们在做定单出货明细表的时候引用这两个字段时就不需要在前面输入具体的表名若我们把加入表的前缀两张表中的字段都命名为Order_ID则在引用他们的时候被参考的表的ID字段要加入表名若其关联查询的表越多则每一张表都要加入表名才能够对其进行引用很明显前者的引用方式要节省工作量
当然上述的命名规范要根据自己的项目团队的爱好来定总之一个基本的原则就是命名规范要统一不能够一个开发团队三个开发人员一人一套这不利于项目团队之间的合作
前期工作二考虑系统的灵活性
一个优秀的数据库管理员在数据库开发的时候往往会考虑用户未来的需求变化以提高数据库的灵活性若用户每次变更一下需求都要通过变更数据库对象来实现那这个数据库也太过于僵硬了
故笔者认为数据库管理员在对数据库开发之前要跟客户进行沟通确定在未来哪些方面可能会发生变更然后采取某些策略对其进行控制力保在不对数据库进行调整的情况下通过一些简单的配置实现对需求的调整
如笔者一次在开发一个超市零售系统数据库的时候笔者在跟客户的沟通中就遇到了这么一个细节问题超市产品的价格可能会有一些季节性的调价问题按照以前的设计系统只能够实现有规律的条件如某类产品统一上挑多少个百分点等等但是这远远不能够满足企业的需求因为在调整价格之前他们都会通过Excle表格的形式跟供应商确认条件的事情所以超市管理员希望能够直接根据这份表格对系统中的价格进行更新笔者了解这个信息后就涉及了一个价格更新的批处理程序方便用户对价格进行成批的更新
这些功能不要看其小但是却可以给客户一种很好的感觉说实话现在同类系统之间的抄袭现象已经很严重同质化现象越来越突出我们只有在用户友好性与系统灵活性上下功夫才能够拉拢客户引得比较好的知名度
前期工作三充分重视报表的设计工作
用户在使用系统的时候做多用到的功能是什么呢?不是数据的更新而是查询而查询中%以上都是通过报表功能来实现的所以从数据库对象的角度来考虑用户用到的最多的就是报表同时因为报表需要对多张表实现关联查询而且其包含的记录又比较多所以其设计的好坏又直接关系到数据库的性能
在对报表进行设计的时候除了要充分考虑用户的需求之外还需要考虑如下几个关键问题
一是记录的排序问题在报表设计的时候我们希望能够实现报表一生成其记录排序就符合用户的常规需要而不需要用户再进行调整如有一张库存交易记录报表在排序的时候可以按产品来进行排序也可以按交易日期来排序又可以根据单据类型来排序此时数据库开发人员就需要跟客户进行沟通看看其喜爱的排序方式是什么当从数据库查询出数据然后用户再对其重新排序的时候若记录比较多的话则其仍然需要几十秒不等的等待时间故合理设置报表纪录的排序问题是数据库报表设计之前首先要跟客户确认的问题
二是在报表中要尽量避免采用系统主键由系统产生的主键在报表中很难管理如当用户在具有系统生成主键的表内用副键进行查找往往会返回多条重复记录所以在报表中采用系统主键来进行检索不但效率低而且容易引起数据查询的混乱故在报表设计的时候宁可利用用户主键也不要采用系统主键
三是数据汇总尽量通过前台程序实现有时候用户往往需要对报表中的记录进行汇总如销售订单总的销售金额当前的出货累计金额等等这些汇总的功能即可以在报表视图中实现也可以通过前台程序控制笔者比较倾向与后者因为在数据库设计的时候即使数据库管理员跟客户进行了充分的沟通也难保其后续需求的变化为了提高数据库的灵活性最好能够在前台实现报表自定义功能让用户根据自身的需求在前台对相关汇总选项进行控制此时就需要数据库管理员跟前台程序开发人员进行协商确定相关的参数
前期工作四做好ER图表与数字字典的维护工作
在数据库开发项目之前项目团队还是有必要做一份ER图表并且建立数字字典确实要做好这两件工作会花费比较多的时间与精力但是若你数据库开发项目是一个团队而不是单枪匹马的话则就会起到很大的作用
ER图表与数字字典有利于帮助其他开发人员了解数据库的整个设计思路在数据库设计之间做好ER图表以及数字字典可以有效的避免今后可能面临的管理混乱问题而且数字字典中包换每个字段的数据类型;ER图表中包含每个表的主外键这就方便了项目团队成员对其他人建立的对象的引用
若做个形象的比喻ER图表就好像是写作文的提纲一个提纲列的好坏直接跟文章的质量有关建立了ER图表之后作为项目负责人就可以给各个项目成员分配工作有利于项目管理员协调各个项目成员的工作
故笔者认为在数据库项目正式开始之前项目团队花些时间做好ER图表以及数据字典的相关工作这是必须的虽然需要耗费比较长的时间可是这个投资到时候肯定会有回报
以上四个前期准备工作是笔者在数据库开发之前必需要完成的准备工作只要有一项没有完成笔者就会觉得还有什么东西忘了似的不敢贸然进行数据库的开发笔者在这里强烈建议在数据库开发之前认真做好这四项基本的准备工作