年代初以来国内许多计算机专家先后深入一些大型企业力图开发出理想的大型MIS实践证明开发出的大型MIS多数不很理想原因何在?据作者一孔之见其中一条重要的原因就是在开发过程中对MIS的数据库设计重视不够没有把它当作一件头等大事来处理一个大型MIS如果它的数据库设计出了问题就是出了大问题或者说从根本上出了问题这样的MIS不会成功只会失败既然如此应该怎样来解决它呢?
一MIS的基础是数据库
NIS系统包括硬件和软件两部分MIS的软件是由文档加程序组成的它的文档就是MIS的全部设计说明书它的程序就是MIS的全部算法加上相应的数据结构MIS的算法无非是它的各种录入修改查询处理输出与菜单程序的算法MIS的数据结构主要是指数据库设计中的各种基本表可以这么说基本表是MIS的基础数据库设计既是MIS开发中的重点又是其难点说它是重点因为设计出一套好的基本表需要许多技巧
MIS的发展是分阶段的不同的阶段对应不同的数据库在MIS的初级(初始与扩展)阶段对应的数据库为应用数据库所谓应用数据库就是针对某项具体的应用而设计的基本表的集合这种数据库的设计使用与维护均较容易在MIS的中级(控制与集成)阶段对应的数据库为主题数据库所谓主题数据库就是针对某方面的主题而设计的基本表的集合它包括本主题范围内的所有应用项目这种数据库的设计使用与维护均较复杂在MIS的高级(数据管理与成熟)阶段对应的数据库为综合数据库所谓综合数据库就是针对某个大型企事业单位的综合管理信息系统而设计的基本表的集合它包括本单位的所有主题这种数据库的设计使用与维护均很复杂对设计者用户与DBA的要求均很高
二数据库设计的一般方法
数据库设计分五大步即数据库需求分析概念设计逻辑设计物理设计与加载测试需求分析的任务是将业务管理单证流转化为数据流绘制出数据流程图DFD并完成相应的数据字典概念设计的任务是从DFD出发识别实体及其相互关系并绘制出实体关系图即ER图逻辑设计的任务是从ER图出发确定各个实体及关系的具体属性物理设计的任务是确定所有属性的类型宽长与取值范围设计出基本表的主键与外键将所有表名与字段名英文化完成相应的数据字典在具体的DBMS环境上实现物理建库工作加载测试工作贯穿于程序测试工作的全过程整个录入修改查询处理输出工作均可视为对数据库的加载测试工作应该指出大型数据库的设计不大可能一次顺利完成上述五大步骤很可能是一个不断迭代的过程
三基本表与其它表
MIS中的数据库是由一组基本表所组成的一个实体可以用一张基本表来描述一个复杂关系也可以用一张基本表来描述所以基本表可以代表一个实体也可以代表一个关系基本表中的字段就是实体或关系的属性基本表是存放基础数据的地方这些基础数据具有五个基本性质原子性即表中的数据是元数据演绎性即由表中的数据可以生成系统所有的输出数据稳定性即表中的数据一次录入多次使用长期保存
规范性即表中的数据满足第三范式客观性即表中的数据是客观存在的数据不是主观想象中的数据
MIS中的表除了基本表之外还有一些非基本表如代码表中间表临时表与虚表(视图)它们不属于数据库的内容但均以表的形式出现为数据的录入查询处理输出提供方便利用基本表的五个性质很容易区分基本表与非基本表非基本表的设计是不难的基本表的设计是较难的MIS中的数据库设计主要是指基本表的设计
四数据库的设计技巧
数据库设计中有两个难点一是如何处理多对多的关系二是如何设计主键处理多对多的关系的办法为将一个多对多的关系分解为一个一对多的关系加上另一个多对一的关系例如若两个表之间存在多对多的关系就在它俩之间增加一个表该表的字段中至少要包括前两个表的主键在内这样就将一个多对多的关系转化为两个一对多的关系了
在基本表中主键是记录的唯一标识一般而言主键是为索引文件或表间连接服务的它对用户不透明只提供给程序员使用因此主键的取值最好为一串无物理意义的数值且由程序自动加来实现主键是一个永久为非空的字段一旦产生便不能修改但可以被拷贝通过拷贝这个表的主键可作为那个表的外键要设计好数据库除了克服以上两个难点之外还应遵循下列原则即基本表的个数越少越好;主键的个数越少越好;字段的个数越少越好
五MIS的开发模式
结合我国的特点大型MIS的开发与大型数据库的设计均应分为两个层次即内核层与外壳层内核层对应法治设计上讲究通用性外壳层对应人治设计上讲究专用性随着中国经济与世界经济接轨进程的发展MIS的内核层将逐步扩大外壳层将逐步缩小通用性将逐步增强
当前我国大型企事业单位的MIS建设少数单位已跨过了初级阶段开始迈向中级或高级阶段与此同时数据库设计已告别了应用数据库时期开始向主题数据库或综合数据库过渡主题数据库或综合数据库的设计与应用数据库设计的本质区别是前者是面向数据后者是面向程序一个大型企事业单位的MIS建设是一个长期的反复的过程在这一过程中应用程序与输出图表可能逐年变动但基础数据是稳定不变的只要我们将基本表设计面向数据不面向程序用基本表组织好元数据就能以不变应万变避免在MIS建设中的失误