国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于ERwin軟件的高校學(xué)年制學(xué)生成績(jī)管理系統(tǒng)的重構(gòu)與實(shí)現(xiàn)

2013-01-15 06:41杜海舟石光輝潘耀芳秦勁松
關(guān)鍵詞:數(shù)據(jù)文件重構(gòu)建模

杜海舟,石光輝,潘耀芳,秦勁松

(上海電力學(xué)院a.計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,b.教務(wù)處,上海 200090)

隨著近年來(lái)高校的迅速發(fā)展,原有的學(xué)籍管理方式和信息化系統(tǒng)已經(jīng)無(wú)法適應(yīng)當(dāng)前教學(xué)實(shí)踐的需要.上海電力學(xué)院2000年以前的學(xué)籍管理采用學(xué)年制管理,使用的是Foxpro文件型數(shù)據(jù)庫(kù),2000年后的學(xué)籍管理采用通用的學(xué)分制管理,而FoxPro文件型數(shù)據(jù)庫(kù)用于現(xiàn)在的學(xué)籍管理系統(tǒng)存在很多問(wèn)題.

對(duì)于數(shù)據(jù)庫(kù)重構(gòu)方法,國(guó)內(nèi)有人針對(duì)數(shù)據(jù)庫(kù)重構(gòu)中特定物理模型和邏輯模型,分別提出了各自的元模型,以統(tǒng)一各方法中模型的表現(xiàn)形式,并進(jìn)一步提出如何把現(xiàn)有方法的規(guī)則轉(zhuǎn)化為對(duì)查詢/視圖/轉(zhuǎn)換的描述.在該框架下,對(duì)于一個(gè)特定的數(shù)據(jù)庫(kù)而言,交叉使用現(xiàn)有重構(gòu)方法中的某幾種方法,只需要把幾種方法的規(guī)則重新組合成新的方法,最后交由特定的模型驅(qū)動(dòng)框架來(lái)實(shí)現(xiàn)[1].有人利用計(jì)算機(jī)輔助軟件設(shè)計(jì) ERwin和Sqlserver數(shù)據(jù)庫(kù)自帶的工具Osql進(jìn)行數(shù)據(jù)庫(kù)的重構(gòu)[2].也有人在剖析基本表結(jié)構(gòu)的基礎(chǔ)上,提出利用數(shù)據(jù)解析的方式建立數(shù)據(jù)庫(kù)重構(gòu)模型的設(shè)計(jì)方法,并采用PB設(shè)計(jì)實(shí)現(xiàn)了向?qū)綌?shù)據(jù)庫(kù)重構(gòu)模塊[3].筆者基于模型驅(qū)動(dòng)和逆向工程開(kāi)發(fā)了一個(gè)基于c/s結(jié)構(gòu)的重構(gòu)系統(tǒng),其目的就是將原有的學(xué)年制學(xué)生成績(jī)管理的文件型數(shù)據(jù)庫(kù)進(jìn)行重構(gòu),并將數(shù)據(jù)還原和加載到目前主流的Oracle關(guān)系型數(shù)據(jù)庫(kù)中.

1 重構(gòu)過(guò)程

由于原有的FoxPro數(shù)據(jù)庫(kù)系統(tǒng)開(kāi)發(fā)時(shí)間較早,因而存在原有數(shù)據(jù)庫(kù)不支持多線程編程調(diào)用,存儲(chǔ)和讀取效率低,又缺乏相應(yīng)的開(kāi)發(fā)、維護(hù),以及說(shuō)明文檔等問(wèn)題,因此有必要對(duì)教學(xué)管理數(shù)據(jù)庫(kù)進(jìn)行重構(gòu).

數(shù)據(jù)庫(kù)結(jié)構(gòu)重構(gòu)是指在新運(yùn)行環(huán)境下重新構(gòu)造數(shù)據(jù)庫(kù)結(jié)構(gòu),使之與開(kāi)發(fā)程序時(shí)的結(jié)構(gòu)完全一致.數(shù)據(jù)庫(kù)結(jié)構(gòu)重構(gòu)是數(shù)據(jù)庫(kù)發(fā)布的中心環(huán)節(jié)[4].本文采用以下幾個(gè)步驟進(jìn)行數(shù)據(jù)庫(kù)結(jié)構(gòu)的重構(gòu):

(1)讀取FoxPro數(shù)據(jù)庫(kù)的數(shù)據(jù)文件;

(2)分析中間數(shù)據(jù)集的數(shù)據(jù);

(3)基于ERwin專業(yè)建模軟件工具重新建模;

(4)生成相應(yīng)的Oracle數(shù)據(jù)庫(kù)的Sql腳本;

(5)新的數(shù)據(jù)結(jié)構(gòu)建成后開(kāi)發(fā)新的學(xué)生成績(jī)管理系統(tǒng).

2 讀取FoxPro數(shù)據(jù)庫(kù)的數(shù)據(jù)文件

由于原有的FoxPro數(shù)據(jù)庫(kù)沒(méi)有相應(yīng)的開(kāi)發(fā)文檔,所以整個(gè)數(shù)據(jù)庫(kù)的結(jié)構(gòu)無(wú)法獲得,只能通過(guò)讀取原有FoxPro數(shù)據(jù)庫(kù)的數(shù)據(jù)文件后根據(jù)數(shù)據(jù)集重新進(jìn)行分析.要分析dbf數(shù)據(jù)文件,需要通過(guò)以下步驟打開(kāi)相應(yīng)的數(shù)據(jù)文件:

(1)讀取文件頭信息;

(2)將字段類型轉(zhuǎn)化為系統(tǒng)數(shù)據(jù)類型;

(3)構(gòu)建Dataset類型數(shù)據(jù).

由于dbf數(shù)據(jù)文件是一張表格對(duì)應(yīng)一個(gè)文件,其分散的形式不利于數(shù)據(jù)庫(kù)的重構(gòu),而且在處理數(shù)據(jù)時(shí)還需要整合和批量讀取,但文件流操作全部在內(nèi)存進(jìn)行,所以整合和表格的重構(gòu)就不能在當(dāng)前的文件流進(jìn)行,需要增加相應(yīng)的文件流操作.增加的操作如下:

(1)采用打開(kāi)文件流的方式來(lái)打開(kāi)FoxPro數(shù)據(jù)庫(kù)的dbf自由表文件;

(2)讀取文件頭信息;

(3)將字段類型轉(zhuǎn)換為系統(tǒng)數(shù)據(jù)類型;

(4)獲取dbf自由表文件對(duì)應(yīng)的數(shù)據(jù)集;

(5)設(shè)置相應(yīng)的標(biāo)題及數(shù)據(jù)類型;

(6)逐條添加數(shù)據(jù).

通過(guò)這些步驟能把dbf文件在脫離FoxPro的環(huán)境下以Dataset數(shù)據(jù)結(jié)構(gòu)讀取到內(nèi)存中.其中要先分析DBF文件結(jié)構(gòu)特征.FoxPro數(shù)據(jù)庫(kù)的DBF數(shù)據(jù)文件結(jié)構(gòu)包括文件結(jié)構(gòu)說(shuō)明區(qū)和數(shù)據(jù)區(qū)兩大部分.文件結(jié)構(gòu)說(shuō)明區(qū)包括數(shù)據(jù)庫(kù)參數(shù)區(qū)和記錄結(jié)構(gòu)表區(qū).其中數(shù)據(jù)庫(kù)參數(shù)區(qū)占32 B,具體參數(shù)說(shuō)明見(jiàn)表1.

表1 數(shù)據(jù)庫(kù)參數(shù)說(shuō)明

同樣,數(shù)據(jù)記錄結(jié)構(gòu)表包括每個(gè)字段參數(shù),每個(gè)字段占32 B,具體說(shuō)明如表2所示.

表2 記錄結(jié)構(gòu)表說(shuō)明

在數(shù)據(jù)區(qū)中還通過(guò)一些特殊標(biāo)志來(lái)描述FoxPro的相應(yīng)版本信息[5],具體對(duì)應(yīng)關(guān)系見(jiàn)表3.

表3 FoxPro版本信息對(duì)應(yīng)

通過(guò)以上步驟,可以把相應(yīng)FoxPro數(shù)據(jù)庫(kù)的數(shù)據(jù)文件中的數(shù)據(jù)讀取到內(nèi)容中,形成中間數(shù)據(jù)集.

3 中間數(shù)據(jù)集的處理

把中間數(shù)據(jù)集當(dāng)成內(nèi)存中的數(shù)據(jù)庫(kù),數(shù)據(jù)集是不依賴于數(shù)據(jù)庫(kù)的獨(dú)立數(shù)據(jù)集合.數(shù)據(jù)集在內(nèi)部是用XML來(lái)描述數(shù)據(jù)的,由于XML是一種與平臺(tái)、語(yǔ)言無(wú)關(guān)的數(shù)據(jù)描述語(yǔ)言,而且可以用來(lái)描述復(fù)雜關(guān)系的數(shù)據(jù),比如父子關(guān)系的數(shù)據(jù),因此數(shù)據(jù)集實(shí)際上可以容納具有復(fù)雜關(guān)系的數(shù)據(jù),而且不再依賴于數(shù)據(jù)庫(kù)鏈路.

Dataset數(shù)據(jù)集是ADO.NET結(jié)構(gòu)的主要組件,是從數(shù)據(jù)源中檢索到的數(shù)據(jù)在內(nèi)存中的緩存.還可通過(guò)使用UniqueConstraint和ForeignKeyConstraint對(duì)象在DataSet中實(shí)現(xiàn)數(shù)據(jù)的完整性.在訪問(wèn)數(shù)據(jù)表對(duì)象時(shí),需注意它們是按條件區(qū)分大小寫(xiě)的.數(shù)據(jù)集可將數(shù)據(jù)和架構(gòu)作為XML文檔進(jìn)行讀寫(xiě).數(shù)據(jù)和架構(gòu)可通過(guò) HTTP傳輸,并在支持XML的任何平臺(tái)上讓所有的應(yīng)用程序使用.

在典型的多層實(shí)現(xiàn)中,創(chuàng)建和刷新數(shù)據(jù)集并依次更新原始數(shù)據(jù)的步驟包括:

(1)通過(guò)DataAdapter使用數(shù)據(jù)源中的數(shù)據(jù)生成和填充數(shù)據(jù)集中的每個(gè)數(shù)據(jù)表;

(2)通過(guò)添加、更新或刪除DataRow對(duì)象更改單個(gè)數(shù)據(jù)表對(duì)象中的數(shù)據(jù);

(3)調(diào)用GetChanges方法以創(chuàng)建只反映對(duì)數(shù)據(jù)進(jìn)行更改的第二個(gè)Dataset數(shù)據(jù)集;

(4)調(diào)用DataAdapter的Update方法,并將第二個(gè)數(shù)據(jù)集作為參數(shù)傳遞;

(5)調(diào)用Merge方法將第二個(gè)數(shù)據(jù)集中的更改合并到第一個(gè)中;

(6)針對(duì)數(shù)據(jù)集調(diào)用AcceptChanges,接受更改,或調(diào)用RejectChanges以取消更改.

數(shù)據(jù)集所有數(shù)據(jù)都加載在內(nèi)存上執(zhí)行,雖然可以提高數(shù)據(jù)訪問(wèn)速度,極大改善程序運(yùn)行的速度和穩(wěn)定性,但由于在內(nèi)存中讀取數(shù)據(jù)集、批量轉(zhuǎn)換這些文件時(shí)會(huì)有內(nèi)存溢出等問(wèn)題,因此采用直接將數(shù)據(jù)集Dataset處理并直接寫(xiě)入數(shù)據(jù)庫(kù)、再調(diào)數(shù)據(jù)庫(kù)函數(shù)對(duì)數(shù)據(jù)進(jìn)行操作的方法.

經(jīng)過(guò)上面的技術(shù)分析后,可以確定該過(guò)程的開(kāi)發(fā)分為以下幾個(gè)步驟:

(1)連接Oracle數(shù)據(jù)庫(kù),取其數(shù)據(jù)源作為數(shù)據(jù)集;

(2)通過(guò)DataAdapter使用數(shù)據(jù)源中的數(shù)據(jù),生成和填充DataSet中的每個(gè)DataTable;

(3)讀取單個(gè)或多個(gè) dbf文件,并構(gòu)建其Dataset和DataTable;

(4)輸出XML文件,或與同類型的Oracle數(shù)據(jù)庫(kù)的數(shù)據(jù)集合并;

(5)用 DataAdapter的Update方法修改返回Oracle數(shù)據(jù)庫(kù),實(shí)現(xiàn)數(shù)據(jù)的合并;

(6)數(shù)據(jù)提交返回Oracle數(shù)據(jù)庫(kù)后,便對(duì)Oracle數(shù)據(jù)庫(kù)進(jìn)行操作.

因?yàn)樵谠缙诘腇oxPro數(shù)據(jù)庫(kù)中,每門(mén)課都沒(méi)有相應(yīng)的課程編號(hào),無(wú)法與現(xiàn)在的學(xué)生成績(jī)管理系統(tǒng)相結(jié)合,因此在重構(gòu)過(guò)程中應(yīng)先根據(jù)數(shù)據(jù)集列出所有課程名稱,然后根據(jù)入學(xué)年份+專業(yè)+學(xué)期+課程號(hào)(自增編號(hào))的格式生成學(xué)生成績(jī)管理系統(tǒng)中作為唯一標(biāo)識(shí)列的內(nèi)部課程號(hào).

4 用基于ERwin專業(yè)建模軟件工具重新建模

ERwin是關(guān)系數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)的優(yōu)秀計(jì)算機(jī)輔助軟件設(shè)計(jì)工具,可用于建立實(shí)體關(guān)系(Entity Relation,E-R)模型,方便地構(gòu)造實(shí)體和聯(lián)系,表達(dá)實(shí)體間的各種約束關(guān)系,并根據(jù)模板創(chuàng)建相應(yīng)的存儲(chǔ)過(guò)程,以及包、觸發(fā)器、角色等,還可編寫(xiě)相應(yīng)的擴(kuò)展屬性等.通過(guò)它不僅能得到優(yōu)化的業(yè)務(wù)功能和數(shù)據(jù)需求模型,而且可以實(shí)現(xiàn)由E-R模型向數(shù)據(jù)庫(kù)物理設(shè)計(jì)的轉(zhuǎn)換.ERwin所支持的數(shù)據(jù)庫(kù)多達(dá)20多種,是最常用的建模工具之一[6].

ERwin的設(shè)計(jì)和使用包括正向和逆向兩個(gè)過(guò)程:正向過(guò)程是用ERwin模型到數(shù)據(jù)庫(kù)物理結(jié)構(gòu)轉(zhuǎn)換來(lái)生成數(shù)據(jù)庫(kù)的表結(jié)構(gòu)以及生成建立數(shù)據(jù)庫(kù)結(jié)構(gòu)的Sql命令的過(guò)程;逆向過(guò)程是在生成Sql和建立數(shù)據(jù)模型時(shí),建模工具根據(jù)已經(jīng)部署的物理數(shù)據(jù)模式,抽出實(shí)體和關(guān)系信息,再重新構(gòu)建數(shù)據(jù)庫(kù)結(jié)構(gòu)的過(guò)程.通過(guò)ERwin的正向過(guò)程來(lái)設(shè)計(jì)數(shù)據(jù)庫(kù)的物理結(jié)構(gòu),進(jìn)而形成開(kāi)發(fā)時(shí)需要的數(shù)據(jù)字典;利用ERwin的逆向過(guò)程來(lái)實(shí)現(xiàn)系統(tǒng)數(shù)據(jù)庫(kù)結(jié)構(gòu)的重構(gòu).通過(guò)數(shù)據(jù)庫(kù)正向過(guò)程實(shí)現(xiàn)對(duì)前面的兩個(gè)表的重構(gòu)的過(guò)程[7],即:建立數(shù)據(jù)庫(kù)結(jié)構(gòu)的實(shí)體關(guān)系;生成目標(biāo)數(shù)據(jù)庫(kù)結(jié)構(gòu).

要將上面設(shè)計(jì)的數(shù)據(jù)表結(jié)構(gòu)移植到指定的目標(biāo)數(shù)據(jù)庫(kù),需要數(shù)據(jù)庫(kù)管理系統(tǒng)和目標(biāo)數(shù)據(jù)庫(kù)的支持.通過(guò)ERwin直接與目標(biāo)數(shù)據(jù)庫(kù)相連,可以將已設(shè)計(jì)好的表結(jié)構(gòu)轉(zhuǎn)移到目標(biāo)數(shù)據(jù)庫(kù)中.

通過(guò)ERwin正向過(guò)程來(lái)進(jìn)行數(shù)據(jù)庫(kù)結(jié)構(gòu)的設(shè)計(jì),簡(jiǎn)化了手工建立數(shù)據(jù)庫(kù)結(jié)構(gòu)的大量工作,提高了設(shè)計(jì)效率.ERwin可以進(jìn)行逆向工程,能夠自動(dòng)生成文檔,支持與數(shù)據(jù)庫(kù)同步,為目標(biāo)Ooracle數(shù)據(jù)庫(kù)生成合適的Sql命令文件[8].

通過(guò)ERwin專業(yè)重構(gòu)工具,根據(jù)教學(xué)管理系統(tǒng)的業(yè)務(wù)邏輯,創(chuàng)建E-R圖,并將E-R圖點(diǎn)擊生成數(shù)據(jù)字典后產(chǎn)生相應(yīng)的Oracle數(shù)據(jù)庫(kù)數(shù)據(jù)字典,其建模過(guò)程如圖1所示.

最后將基于ERwin軟件生成的數(shù)據(jù)字典自動(dòng)產(chǎn)生相應(yīng)的Sql腳本語(yǔ)言.

圖1 ERwin工具建模過(guò)程

5 開(kāi)發(fā)相應(yīng)的數(shù)據(jù)庫(kù)重構(gòu)系統(tǒng)

根據(jù)以上的開(kāi)發(fā)步驟和思路,本課題利用Visual Studio2008軟件中的c#作為開(kāi)發(fā)語(yǔ)言,成功開(kāi)發(fā)了一套相應(yīng)的數(shù)據(jù)庫(kù)重構(gòu)系統(tǒng),實(shí)現(xiàn)了對(duì)原有的用于學(xué)年制學(xué)生成績(jī)管理的FoxPro文件型數(shù)據(jù)庫(kù)的重新構(gòu)建,并且將數(shù)據(jù)還原和加載到現(xiàn)有主流的Oracle關(guān)系型數(shù)據(jù)庫(kù).數(shù)據(jù)庫(kù)的重構(gòu)如圖2所示.

圖2 數(shù)據(jù)庫(kù)重構(gòu)系統(tǒng)管理界面

圖2a是原來(lái)FoxPro數(shù)據(jù)庫(kù)中學(xué)生在大學(xué)4年的選課信息,而圖2b則是數(shù)據(jù)庫(kù)重構(gòu)后導(dǎo)入到Oracle數(shù)據(jù)庫(kù)中的選課信息.

6 結(jié)語(yǔ)

建立學(xué)生成績(jī)管理系統(tǒng)重構(gòu)數(shù)據(jù)庫(kù)是快速有效地進(jìn)行學(xué)生學(xué)籍重構(gòu)的主要方法.在以前FoxPro文件型數(shù)據(jù)庫(kù)的基礎(chǔ)上,根據(jù)軟件的逆向工程,以及ERwin專業(yè)建模軟件工具建立了適合Oracle關(guān)系型數(shù)據(jù)庫(kù)的高校學(xué)生重構(gòu)系統(tǒng),以滿足上海電力學(xué)院教學(xué)實(shí)際的需要.同時(shí),本文也為數(shù)據(jù)庫(kù)開(kāi)發(fā)者實(shí)現(xiàn)數(shù)據(jù)庫(kù)從開(kāi)發(fā)環(huán)境到應(yīng)用環(huán)境的轉(zhuǎn)變提供了一種可行的解決方案.

[1] 王函哲,沈備軍.基于模型驅(qū)動(dòng)架構(gòu)的數(shù)據(jù)庫(kù)重構(gòu)[J].計(jì)算機(jī)工程,2009(24):25-37.

[2] 劉立,金甌.一種基于ERwin和Osql實(shí)現(xiàn)數(shù)據(jù)庫(kù)重構(gòu)的方法研究[J].電腦與信息技術(shù).2003(2):9-11.

[3] 戴大蒙,劉均.關(guān)系數(shù)據(jù)庫(kù)重構(gòu)模型的研究與實(shí)現(xiàn)[J]計(jì)算機(jī)工程2005(23):211-213.

[4] 鄭勁松,盧志明.在Oracle中創(chuàng)建自己的數(shù)據(jù)庫(kù)及優(yōu)化[J].計(jì)算機(jī)應(yīng)用與軟件,2002(5):16-17.

[5] 馮文雍,葉斌,陳興源,等.Visual FoxPro 5.0數(shù)據(jù)庫(kù)開(kāi)發(fā)實(shí)例[M].北京:人民郵電出版社,1999:25-36.

[6] 賴尚丁,齊文春,李輝.生產(chǎn)過(guò)程重構(gòu)數(shù)據(jù)庫(kù)設(shè)計(jì)[J].航空制造工程,1997(6):16-17.

[7] 朱更明,李和軍.基于用戶數(shù)據(jù)庫(kù)系統(tǒng)表的數(shù)據(jù)字典輔助工具設(shè)計(jì)[J].計(jì)算機(jī)應(yīng)用研究,2001,18(8):128-130.

[8] 屈松.同義詞的數(shù)據(jù)庫(kù)重構(gòu)[J].科技信息,2008(13):36-38.

猜你喜歡
數(shù)據(jù)文件重構(gòu)建模
視頻壓縮感知采樣率自適應(yīng)的幀間片匹配重構(gòu)
長(zhǎng)城敘事的重構(gòu)
聯(lián)想等效,拓展建模——以“帶電小球在等效場(chǎng)中做圓周運(yùn)動(dòng)”為例
北方大陸 重構(gòu)未來(lái)
基于PSS/E的風(fēng)電場(chǎng)建模與動(dòng)態(tài)分析
不對(duì)稱半橋變換器的建模與仿真
數(shù)據(jù)文件恢復(fù)專題問(wèn)答
數(shù)據(jù)文件安全管控技術(shù)的研究與實(shí)現(xiàn)
SQL數(shù)據(jù)文件恢復(fù)工具
北京的重構(gòu)與再造