MIS中数据库关键技术及构架设计
2010-02-14宋义秋唐玉琦
宋义秋,唐玉琦
(唐山职业技术学院,唐山 063000)
0 引言
数据库及专用软件是MIS(管理信息系统)的物质基础,而数据库技术则是MIS的核心技术。一个成功的MIS是由50% 的业务和50% 的软件组成的,而50% 的软件又由25% 的数据库和25% 的程序所组成。因此掌握数据库设计关键技术,对于提升保证MIS成功,提升MIS性能有重要意义。
1 数据库设计和MIS
数据库设计(database design)是将业务对象转换为表和视图等数据库对象的过程,它也是数据库应用系统开发过程中首要的和基本的内容,即对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。而MIS即管理信息系统,是一个以人为主导,利用计算机硬件、软件、网络通信设备以及其他办公设备,进行信息的收集、传输、加工、储存、更新和维护,以企业战略竞优、提高效益和效率为目的,支持企业的高层决策、中层控制、基层运作的集成化的人机系统[1]。数据库是MIS系统的一部分,它把MIS中的大量数据按照一定的模型组织起来,提供存储、维护、检索数据的功能,使信息系统可以方便、及时、准确从数据库中获取所需的信息。因此,数据库建设是硬件、软件和干件(技术与管理的界面)的结合,在MIS建设中,数据库设计应该与应用系统设计相结合,即做到数据库框架或数据库结构,以及应用程序、事务处理等同步。
2 数据库设计基本步骤
按照规范设计的方法,考虑数据库及其应用系统开发全过程,一般讲MIS数据库结构设计分为以下五个阶段:需求分析;概念结构设计;逻辑结构设计;物理结构设计,实施维护阶段。
1)需求分析,它是整个设计过程的基础,是最困难、最耗费时间的一步,其目的是准确了解与分析用户需求(包括数据和处理)。需求分析的任务是通过详细调查现实世界要处理的对象(组织、部门、企业等),充分了解原系统(手工系统或计算机系统)工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能,其重点是“数据”和“处理”,通过调查、收集和分析,获得用户对数据库的需求。
2)数据库概念结构设计。它是将分析得到的用户需求抽象为概念模型的过程,即在需求分析的基础上,设计出能够满足用户需求的各种实体以及它们之间的相互关系概念结构设计模型[2]。它是整个数据库设计的关键。概念结构的主要特点是能真实、充分地反映现实世界;易于理解;易于更改;易于向关系、网状、层次等各种数据模型转换。描述概念模型的有力工具是E-R模型。设计概念结构通常有四类方法:自顶向下,即首先定义全局概念结构的框架,然后逐步细化;自底向上,即首先定义各局部应用的概念结构,然后将它们集成起来,得到全局概念结构逐步扩张。逐步扩张,首先定义最重要的核心概念结构,然后向外扩充,以滚雪球的方式逐步生成其他概念结构,直至总体概念结构;混合策略。即将自顶向下和自底向上相结合,用自顶向下策略设计一个全局概念结构的框架,以它为骨架集成由自底向上策略中设计的各局部概念结构。
3)数据库逻辑结构设计。其任务就是把概念结构设计阶段设计好的基本E-R图转换为与选用DBMS产品所支持的数据模型相符合的逻辑结构。主要分三步进行:将概念结构转换为一般的关系、网状、层次模型;将转换来的关系、网状、层次模型向特定DBMS支持下的数据模型转换;对数据模型进行优化。
4)数据库物理结构设计。为一个给定的逻辑数据模型选取一个最适合应用要求的物理结果的过程,就是数据库的物理设计。数据库的物理结构设计通常分为两步:确定数据库的物理结构,在关系数据库中主要指存取方法和存储结构;对物理结构进行评价,评价的重点是时间和空间效率。
5)数据库实施维护阶段。实施就是运用DBMS提供的数据语言、工具及宿主语言,根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。维护即系统经过试运行后不断地对其进行评价、调整与修改等。
3 MIS中数据库设计关键点
3.1 命名规则
统一命名规则可以使数据库的结构和风格标准化,使数据库表容易阅读、理解和维护。好的命名约定可使数据库表结构严谨、可读性强且逻辑关系清晰。因此,在系统面向对象模型向数据库物理模型转化之前,将数据库的各个对象命名进行规则约定,对数据库建模具有重大的意义。1)所有的数据库对象,如表、视图、触发器、索引、存储过程、包、包体、函数、约束、主外键必须按照一定得规则命名,且命名应能保证其直观性。如视图(V_规则命名或规则命名_V),函数(F_规则命名或规则命名_F),检查(CK_规则命名或规则命名_CK),触发器(TR_规则命名或规则命名_TR),索引(IDX_表名或表名_IDX),序列(SEQ_表明_字段名或表明_字段名_SEQ),存储过程(P_规则命名或规则命名_P)等。如果由于数据库对象之间的命名规则与最大长度限制可能造成命名存在冲突,则可以通过缩减表名或自编序号。2)对于数据库表,直接与业务相联系,同时其也决定着相关主键外键,触发器,检查,索引,序列的命名,因此非常重要。为了便于维护,表的命名应该遵从模块,业务,明细的规则,即保证基础数据表则采用通用的识别方法。如进货模块采用通用名_SU_COM_DOC表示进货合同类的表,通用名_SA_CON_DOC表示销售类的合同表,通用名_SU_SET_DOC表示进货结算的表,通用名_SA_BACK_DOC表示销售退货的表等。
3.2 表的设计
表是关系数据库中基本的数据逻辑存储块。表设计是数据库物理设计的第一步,也是整个设计过程中关键的一步。根据系统需求分析和业务逻辑模型分析的结果开始进行表的设计。表设计要综合考虑以下因素:完整性,完整性是在数据库中管理父记录和子记录的概念,它是通过主键,外键,检查约束等保证数据的一致性;规范化,规范化过程是模型化和设计关系数据库的基础,它的目的是消除数据冗余、避免非规范化数据库中的数据更新异常以及简化完整性约束的执行。以武汉某公司信息系统为例,其销售模块的销售合同数据库表在设计过程如下:
首先为表进行分类:两个主表,销售合同(BMS_SA_CON_DOC,BMS_SA_CON_DTL),在这两个主表上,会保存的信息有业务员,客户,货品,价格,数量等信息,因此其关联表为PUB_EMPLOYEE,PUB_COMPANY,PUB_GOODS,PUB_GOODS_PRICE,等。显然这三个表的主键EMPLOYEEID,COMPANY ID,GOODSID,应该是BMS_SA_CON_DOC,BMS_SA_CON_DTL的外键,其他类间的关联关系是同样的处理方式。
其次,对数据冗余进行控制和调整。同一客户在采购时,可能会有不同的货品,因此采用主从表的方式,即BMS_SA_CON_DOC,BMS_SA_CON_DTL,前者的主键是后者的外键,后者依附于前者存在。这样同一次采购的公用信息不用多次存储,减少数据冗余。其次,合同中会包含货品名称,规格,业务员等字符串信息,这些信息会占用较大的存储空间,因此在表的设计时,合同中只记录这些表中的主键,如COMPANY的主键即COMPANYID,GOODS的主键GOODSID等。在合同录入时,自动通过关联将其他信息带出来方便系统使用者选择,但是在数据库保存时,则忽略非主键信息。
总体上讲,表的设计要遵从一定的范式要求。一个关系模式按照数据库范式的要求,可以分解成不同的关系模式集合,得到的关系模式集合往往不是唯一的。按照减少冗余的要求可以将数据库分成多个关系模式集合,只要分解后的数据库能够表达原来数据库所有的信息。减少冗余的目的,一是可以节约存储空间,二是可以避免数据的不一致,提高对数据库的操作效率,同时也可以满足应用的需求。对于不太复杂的数据库,一般设计时能够符合到第三范式即可。当然也要注意,高范式的数据库必然意味着查询时的耳朵关联,这样会导致查询效率不高,因此采用“以空间换速度”的思路也是必须的。根据数据库范式的要求,可以建立标准的数据库。通过使用多个、存在相互联系的具有较少字段的表来构建数据库,尽量减少使用多列的宽表,这样可以带来几个好处:1)由于表所包含的字段较少,进行排序和索引时的效率会更高。2)由于使用多个表,可以使用多簇索引来提高效率。3)由于表中所包含的字段相对较少,在选择主键和索引时会更容易,而且较少的索引也使得表在做插入、更新、删除等操作时的效率更高。
4 MIS中数据库构架设计
4.1 表空间及数据文件设计
表空间是ORCLE数据库中较为特殊的概念,如果数据库安装在UNIX服务器上,对其的理解具有一定的难度。数据库构架时尽量把同一时间对磁盘的读写操作分散开,如对一个表中数据进行更新时,数据库将同时去读该表中的数据和该表上的索引信息,如果把表的数据信息和索引信息都放在同一个数据文件中,则数据库的速度将会变慢。最好的方法是把数据信息和索引信息分别放在不同磁盘的两个数据文件中,此时数据库对磁盘的读写操作将分散在两个磁盘上,速度将得到显著提高。因此在设计数据库的表空间和数据文件时,首先给表和表的索引分别创建两个表空间,分别是存放用户数据的数据表空间和存放表索引的索引表空间。另外,还根据该系统的数据量的大小及系统中的数据的性质不同,再考虑创建几个数据表空间或者给数据表空间添加几个数据文件[3]。表空间创建时一般遵循以下几个原则:较大的表或索引单独分配一个表空间;高频率insert的对象分成一组,存在对应的TABLESPACE中;增、删、改的对象分成一组,存在对应的TABLESPACE中;表和索引分别存于不同的TABLESPAC等。
数据文件是保存数据的物理位置,其依附于表空间而存在,因此数据文件的设计对数据库系统的性能的有重要影响,其设计时应注意:把记录大小相当的表放在同一个表空间中,这时一个表空间的存储参数设置,可以保证表中的记录都放在一个范围中,避免了一条记录跨范围存放,可以明显数据库的性能;规定每个表空间可由多个数据文件组成,每个数据文件大小2G;为了避免磁盘的I/O操作冲突,提高系统性能,把数据文件创建在不同位置,即不同表空间或磁盘。
4.2 oracle内存分配设计
内存分配方面最容易引起系统性能下降的原因在于Oracle系统全局区SGA的一些不恰当设置。结合一些信息资源综合管理系统,通过查询V$SYSSTAT视图中的各种指标,发现目前系统运行速度过慢的主要原因是SGA内部的数据高速缓冲区命中率过低,数据库系统在查询时不能从共享池或者数据缓冲区内找到己经缓存的数据,从而频繁地到磁盘上读取数据,消耗系统资源,造成等待时间过长。针对以上问题,采用增大共享池和数据缓冲区、调整相关参数、鼓励代码重用等方式提高系统的命中率,减少系统到磁盘上的读取次数,进而减少等待时间。共享池的主要组件是Library Cache以及Date Dictionary Cache,而最简单的方法是尽可能放大共享池大小。改进Database Buffer Cache的性能也有利于提高数据库性能,改进Data base Buffer Cache性能的最简单方法是加大它的大小,其值越大,得到缓存的缓冲区就越不可能被LRU列表从 Buffer Cache中删除掉。缓冲区在Data base Buffer Cache中存储的时间越长,命中率就会越高。
服务器的内存一定的情况下,一般遵循OS使用内存+SGA+并发进程数×(Sort_area_size+Hash_area_size+2M)<0.7RAM这个公式为参考进行自由调整即可。初始化参数文件中的一些参数对SGA的大小有决定性的影响。另外DB_BLOCKSIZE数据块大小,DB_BLOCK_BUFFERS数据块缓冲区,LOG_BUFFER日志缓冲区,SORT_AREASIZE,SORT_AREARETAINED_SIZE的大小,ROLLBACK_SEGMENTS回滚段等参数也必须在对初始参数运行之后,进行有效的分析并进行改进,才能达成内存的最优化配置。
[1] 杨媛媛.J2EE环境下通用数据操作框架的研究[D].山东大学,2006.
[2] 李建中,王珊.数据库系统原理[M].北京:电子工业出版社,2004.
[3] 陈渝,秦开大,田亮.基于Power Designer的信息系统数据模型建设[J].昆明理工大学学报(理工版).2004(2):45-47.