基于ERwin软件的高校学年制学生成绩管理系统的重构与实现
2013-01-15杜海舟石光辉潘耀芳秦劲松
杜海舟,石光辉,潘耀芳,秦劲松
(上海电力学院a.计算机科学与技术学院,b.教务处,上海 200090)
随着近年来高校的迅速发展,原有的学籍管理方式和信息化系统已经无法适应当前教学实践的需要.上海电力学院2000年以前的学籍管理采用学年制管理,使用的是Foxpro文件型数据库,2000年后的学籍管理采用通用的学分制管理,而FoxPro文件型数据库用于现在的学籍管理系统存在很多问题.
对于数据库重构方法,国内有人针对数据库重构中特定物理模型和逻辑模型,分别提出了各自的元模型,以统一各方法中模型的表现形式,并进一步提出如何把现有方法的规则转化为对查询/视图/转换的描述.在该框架下,对于一个特定的数据库而言,交叉使用现有重构方法中的某几种方法,只需要把几种方法的规则重新组合成新的方法,最后交由特定的模型驱动框架来实现[1].有人利用计算机辅助软件设计 ERwin和Sqlserver数据库自带的工具Osql进行数据库的重构[2].也有人在剖析基本表结构的基础上,提出利用数据解析的方式建立数据库重构模型的设计方法,并采用PB设计实现了向导式数据库重构模块[3].笔者基于模型驱动和逆向工程开发了一个基于c/s结构的重构系统,其目的就是将原有的学年制学生成绩管理的文件型数据库进行重构,并将数据还原和加载到目前主流的Oracle关系型数据库中.
1 重构过程
由于原有的FoxPro数据库系统开发时间较早,因而存在原有数据库不支持多线程编程调用,存储和读取效率低,又缺乏相应的开发、维护,以及说明文档等问题,因此有必要对教学管理数据库进行重构.
数据库结构重构是指在新运行环境下重新构造数据库结构,使之与开发程序时的结构完全一致.数据库结构重构是数据库发布的中心环节[4].本文采用以下几个步骤进行数据库结构的重构:
(1)读取FoxPro数据库的数据文件;
(2)分析中间数据集的数据;
(3)基于ERwin专业建模软件工具重新建模;
(4)生成相应的Oracle数据库的Sql脚本;
(5)新的数据结构建成后开发新的学生成绩管理系统.
2 读取FoxPro数据库的数据文件
由于原有的FoxPro数据库没有相应的开发文档,所以整个数据库的结构无法获得,只能通过读取原有FoxPro数据库的数据文件后根据数据集重新进行分析.要分析dbf数据文件,需要通过以下步骤打开相应的数据文件:
(1)读取文件头信息;
(2)将字段类型转化为系统数据类型;
(3)构建Dataset类型数据.
由于dbf数据文件是一张表格对应一个文件,其分散的形式不利于数据库的重构,而且在处理数据时还需要整合和批量读取,但文件流操作全部在内存进行,所以整合和表格的重构就不能在当前的文件流进行,需要增加相应的文件流操作.增加的操作如下:
(1)采用打开文件流的方式来打开FoxPro数据库的dbf自由表文件;
(2)读取文件头信息;
(3)将字段类型转换为系统数据类型;
(4)获取dbf自由表文件对应的数据集;
(5)设置相应的标题及数据类型;
(6)逐条添加数据.
通过这些步骤能把dbf文件在脱离FoxPro的环境下以Dataset数据结构读取到内存中.其中要先分析DBF文件结构特征.FoxPro数据库的DBF数据文件结构包括文件结构说明区和数据区两大部分.文件结构说明区包括数据库参数区和记录结构表区.其中数据库参数区占32 B,具体参数说明见表1.
表1 数据库参数说明
同样,数据记录结构表包括每个字段参数,每个字段占32 B,具体说明如表2所示.
表2 记录结构表说明
在数据区中还通过一些特殊标志来描述FoxPro的相应版本信息[5],具体对应关系见表3.
表3 FoxPro版本信息对应
通过以上步骤,可以把相应FoxPro数据库的数据文件中的数据读取到内容中,形成中间数据集.
3 中间数据集的处理
把中间数据集当成内存中的数据库,数据集是不依赖于数据库的独立数据集合.数据集在内部是用XML来描述数据的,由于XML是一种与平台、语言无关的数据描述语言,而且可以用来描述复杂关系的数据,比如父子关系的数据,因此数据集实际上可以容纳具有复杂关系的数据,而且不再依赖于数据库链路.
Dataset数据集是ADO.NET结构的主要组件,是从数据源中检索到的数据在内存中的缓存.还可通过使用UniqueConstraint和ForeignKeyConstraint对象在DataSet中实现数据的完整性.在访问数据表对象时,需注意它们是按条件区分大小写的.数据集可将数据和架构作为XML文档进行读写.数据和架构可通过 HTTP传输,并在支持XML的任何平台上让所有的应用程序使用.
在典型的多层实现中,创建和刷新数据集并依次更新原始数据的步骤包括:
(1)通过DataAdapter使用数据源中的数据生成和填充数据集中的每个数据表;
(2)通过添加、更新或删除DataRow对象更改单个数据表对象中的数据;
(3)调用GetChanges方法以创建只反映对数据进行更改的第二个Dataset数据集;
(4)调用DataAdapter的Update方法,并将第二个数据集作为参数传递;
(5)调用Merge方法将第二个数据集中的更改合并到第一个中;
(6)针对数据集调用AcceptChanges,接受更改,或调用RejectChanges以取消更改.
数据集所有数据都加载在内存上执行,虽然可以提高数据访问速度,极大改善程序运行的速度和稳定性,但由于在内存中读取数据集、批量转换这些文件时会有内存溢出等问题,因此采用直接将数据集Dataset处理并直接写入数据库、再调数据库函数对数据进行操作的方法.
经过上面的技术分析后,可以确定该过程的开发分为以下几个步骤:
(1)连接Oracle数据库,取其数据源作为数据集;
(2)通过DataAdapter使用数据源中的数据,生成和填充DataSet中的每个DataTable;
(3)读取单个或多个 dbf文件,并构建其Dataset和DataTable;
(4)输出XML文件,或与同类型的Oracle数据库的数据集合并;
(5)用 DataAdapter的Update方法修改返回Oracle数据库,实现数据的合并;
(6)数据提交返回Oracle数据库后,便对Oracle数据库进行操作.
因为在早期的FoxPro数据库中,每门课都没有相应的课程编号,无法与现在的学生成绩管理系统相结合,因此在重构过程中应先根据数据集列出所有课程名称,然后根据入学年份+专业+学期+课程号(自增编号)的格式生成学生成绩管理系统中作为唯一标识列的内部课程号.
4 用基于ERwin专业建模软件工具重新建模
ERwin是关系数据库应用开发的优秀计算机辅助软件设计工具,可用于建立实体关系(Entity Relation,E-R)模型,方便地构造实体和联系,表达实体间的各种约束关系,并根据模板创建相应的存储过程,以及包、触发器、角色等,还可编写相应的扩展属性等.通过它不仅能得到优化的业务功能和数据需求模型,而且可以实现由E-R模型向数据库物理设计的转换.ERwin所支持的数据库多达20多种,是最常用的建模工具之一[6].
ERwin的设计和使用包括正向和逆向两个过程:正向过程是用ERwin模型到数据库物理结构转换来生成数据库的表结构以及生成建立数据库结构的Sql命令的过程;逆向过程是在生成Sql和建立数据模型时,建模工具根据已经部署的物理数据模式,抽出实体和关系信息,再重新构建数据库结构的过程.通过ERwin的正向过程来设计数据库的物理结构,进而形成开发时需要的数据字典;利用ERwin的逆向过程来实现系统数据库结构的重构.通过数据库正向过程实现对前面的两个表的重构的过程[7],即:建立数据库结构的实体关系;生成目标数据库结构.
要将上面设计的数据表结构移植到指定的目标数据库,需要数据库管理系统和目标数据库的支持.通过ERwin直接与目标数据库相连,可以将已设计好的表结构转移到目标数据库中.
通过ERwin正向过程来进行数据库结构的设计,简化了手工建立数据库结构的大量工作,提高了设计效率.ERwin可以进行逆向工程,能够自动生成文档,支持与数据库同步,为目标Ooracle数据库生成合适的Sql命令文件[8].
通过ERwin专业重构工具,根据教学管理系统的业务逻辑,创建E-R图,并将E-R图点击生成数据字典后产生相应的Oracle数据库数据字典,其建模过程如图1所示.
最后将基于ERwin软件生成的数据字典自动产生相应的Sql脚本语言.
图1 ERwin工具建模过程
5 开发相应的数据库重构系统
根据以上的开发步骤和思路,本课题利用Visual Studio2008软件中的c#作为开发语言,成功开发了一套相应的数据库重构系统,实现了对原有的用于学年制学生成绩管理的FoxPro文件型数据库的重新构建,并且将数据还原和加载到现有主流的Oracle关系型数据库.数据库的重构如图2所示.
图2 数据库重构系统管理界面
图2a是原来FoxPro数据库中学生在大学4年的选课信息,而图2b则是数据库重构后导入到Oracle数据库中的选课信息.
6 结语
建立学生成绩管理系统重构数据库是快速有效地进行学生学籍重构的主要方法.在以前FoxPro文件型数据库的基础上,根据软件的逆向工程,以及ERwin专业建模软件工具建立了适合Oracle关系型数据库的高校学生重构系统,以满足上海电力学院教学实际的需要.同时,本文也为数据库开发者实现数据库从开发环境到应用环境的转变提供了一种可行的解决方案.
[1] 王函哲,沈备军.基于模型驱动架构的数据库重构[J].计算机工程,2009(24):25-37.
[2] 刘立,金瓯.一种基于ERwin和Osql实现数据库重构的方法研究[J].电脑与信息技术.2003(2):9-11.
[3] 戴大蒙,刘均.关系数据库重构模型的研究与实现[J]计算机工程2005(23):211-213.
[4] 郑劲松,卢志明.在Oracle中创建自己的数据库及优化[J].计算机应用与软件,2002(5):16-17.
[5] 冯文雍,叶斌,陈兴源,等.Visual FoxPro 5.0数据库开发实例[M].北京:人民邮电出版社,1999:25-36.
[6] 赖尚丁,齐文春,李辉.生产过程重构数据库设计[J].航空制造工程,1997(6):16-17.
[7] 朱更明,李和军.基于用户数据库系统表的数据字典辅助工具设计[J].计算机应用研究,2001,18(8):128-130.
[8] 屈松.同义词的数据库重构[J].科技信息,2008(13):36-38.