趙會群 趙俊寶 張?jiān)娰? 孫晶
摘要: 針對當(dāng)前網(wǎng)絡(luò)環(huán)境中異構(gòu)數(shù)據(jù)庫間的數(shù)據(jù)共享與數(shù)據(jù)交換問題,探討了XML語言數(shù)據(jù)處理特點(diǎn)以及.Net框架中ADO.Net對數(shù)據(jù)源進(jìn)行訪問的特色,采用C#語言實(shí)現(xiàn)了以XML為中間件的異構(gòu)數(shù)據(jù)庫間的數(shù)據(jù)交換工具。
關(guān)鍵詞: XML; 異構(gòu)數(shù)據(jù)庫; 數(shù)據(jù)交換
中圖分類號:TP311文獻(xiàn)標(biāo)志碼:A文章編號:1006-8228(2010)05-41-02
The research and implementation of the Data migration method based on XML
Zhao Huiqun, Zhao Junbao, Zhang Shikan, Sun Jing
(The northern industrial university, Beijing 100144, China)
Abstract: The problems about the data sharing and data migration among heterogeneous database in network environment are discussed, and the XML language characteristics and the using ofthe ADO.net to access to the data source in .net framework are studied. Finally, useing c# language, a tool which using a middleware base on XML to exchange data between heterogeneous database is realized.
Key words: XML; heterogeneous database; data switching
0 引言
XML是一套定義語義標(biāo)記的規(guī)則,這些標(biāo)記將文檔分成許多部件并對這些部件加以標(biāo)識。同時(shí)XML也是元標(biāo)記語言,即定義了用于定義其他與特定領(lǐng)域有關(guān)的、語義的、結(jié)構(gòu)化的標(biāo)記語言的句法語言。XML允許用戶自行定義標(biāo)記與屬性,并可以按照所定義的標(biāo)記與屬性的語法來開發(fā)應(yīng)用程序,因而具有很好的擴(kuò)展性。由于XML實(shí)現(xiàn)了內(nèi)容與形式的分離以及在編寫過程中遵循嚴(yán)格的語法要求,這為XML在不同的系統(tǒng)間傳輸提供極大的便利。XML的最大優(yōu)點(diǎn)是其數(shù)據(jù)描述和數(shù)據(jù)傳送能力,因此具有很強(qiáng)的開放性[1]。
數(shù)據(jù)庫技術(shù)是現(xiàn)代信息科學(xué)與技術(shù)的重要組成部分,是計(jì)算機(jī)數(shù)據(jù)處理與信息管理系統(tǒng)的核心。Microsoft為數(shù)據(jù)訪問提供全新的編程模型,設(shè)計(jì)開發(fā)了基于.NET Framework的ADO.NET數(shù)據(jù)訪問模型。ADO.NET具有強(qiáng)大的數(shù)據(jù)庫操縱功能,針對不同的數(shù)據(jù)訪問形式,設(shè)計(jì)了相應(yīng)的實(shí)現(xiàn)類,開發(fā)者可以使用這些類中的方法與屬性方便地對不同的數(shù)據(jù)源進(jìn)行操作,如數(shù)據(jù)庫和XML文件等。.NET Framework數(shù)據(jù)提供程序是專門為數(shù)據(jù)訪問和處理而設(shè)計(jì)的組件,包括提供數(shù)據(jù)源連接的Connection對象,處理數(shù)據(jù)庫命令的command對象,提供高性能數(shù)據(jù)流的DataReader對象以及連接Dataset與數(shù)據(jù)源的DataAdapter對象。ADO.NET中一個(gè)核心概念是DataSet,專門為獨(dú)立于任何數(shù)據(jù)源的數(shù)據(jù)訪問而設(shè)計(jì)。DataSet是數(shù)據(jù)的內(nèi)存駐留表示形式,無論數(shù)據(jù)源是什么,它都會提供一致的關(guān)系變換模型,使得開發(fā)者在開發(fā)過程中可以屏蔽數(shù)據(jù)庫之間的差異從而獲得一致的編程模型。本實(shí)例正是使用DataSet的特點(diǎn)來實(shí)現(xiàn)不同數(shù)據(jù)源間數(shù)據(jù)的存取操作。
1 實(shí)例背景
當(dāng)前的主流數(shù)據(jù)庫系統(tǒng)包括SqlServer,Oracle和MySql等數(shù)據(jù)庫,但是他們之間在結(jié)構(gòu)上存在一定的差異,正是由于這些差異,在各種數(shù)據(jù)庫之間進(jìn)行數(shù)據(jù)遷移時(shí),需要對其進(jìn)行相應(yīng)的修改,以保證數(shù)據(jù)遷移的正確性。盡管各大數(shù)據(jù)庫廠商都提供了相應(yīng)的數(shù)據(jù)遷移工具,比如SqlServer中提供Import/Export工具進(jìn)行數(shù)據(jù)遷移服務(wù),Oracle中提供SQL*Loader遷移工具,同樣也可以使用ODBC數(shù)據(jù)源管理工具來進(jìn)行MySql數(shù)據(jù)庫與SqlServer、Oracle等數(shù)據(jù)庫間的數(shù)據(jù)遷移。但是這些工具或者操作方法都比較復(fù)雜,并且實(shí)現(xiàn)的主要功能是將某一數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)庫完整地遷移到其他目標(biāo)數(shù)據(jù)庫中。在遷移過程中,需要使用者在數(shù)據(jù)庫遷移方面有一定的經(jīng)驗(yàn),才能高效,準(zhǔn)確地完成遷移工作。
當(dāng)前商場、超市等的進(jìn)銷存系統(tǒng)中,商品基礎(chǔ)信息的存儲表有著很重要的作用,商品的名稱,規(guī)格等自身的屬性被持久存貯在系統(tǒng)數(shù)據(jù)庫中,并且跟隨商品作為商品說明在生產(chǎn)、運(yùn)輸、銷售、服務(wù)等環(huán)節(jié)中進(jìn)行流通。這些在不同環(huán)節(jié)、不同系統(tǒng)中流通的商品信息,其變更與存儲主要是通過員工手工錄入的方式來進(jìn)行的,這個(gè)過程中就會出現(xiàn)信息錄入的效率,準(zhǔn)確性等問題。
鑒于不同數(shù)據(jù)庫間的異構(gòu)性以及商品信息的流通性較強(qiáng)這兩方面因素的考慮,為了提高進(jìn)銷存系統(tǒng)中數(shù)據(jù)的錄入能力,提出了這樣一種解決辦法:供貨商在提供一種新的商品時(shí),可以使用該工具生成一份XML格式的文檔說明,來具體描述商品基本信息;銷售商可以使用該工具,將XML格式表示的商品信息錄入自身的系統(tǒng)中。在這個(gè)過程中,雙方都不需考慮對方的數(shù)據(jù)庫支持格式。這樣就實(shí)現(xiàn)了商品信息的快速遷移工作。
2 設(shè)計(jì)實(shí)現(xiàn)
2.1 不同數(shù)據(jù)庫數(shù)據(jù)類型與XML數(shù)據(jù)類型之間的映射
基于XML實(shí)現(xiàn)數(shù)據(jù)的交換,必須解決兩方面的問題,一是XML文檔與數(shù)據(jù)庫之間模型對象的映射關(guān)系,二是兩者數(shù)據(jù)類型直接的映射關(guān)系[2]。由于本方法的應(yīng)用特殊性,XML文檔只對應(yīng)數(shù)據(jù)庫單表操作,因此,這種模型映射稍微簡單,只要XML根元素對應(yīng)數(shù)據(jù)庫導(dǎo)入/導(dǎo)出表,子元素中元素屬性對應(yīng)數(shù)據(jù)庫列字段類型,元素值對應(yīng)列值即可。對于后者,則需要考慮XML數(shù)據(jù)類型與其他關(guān)系數(shù)據(jù)庫數(shù)據(jù)類型的對應(yīng)關(guān)系。當(dāng)前流行的數(shù)據(jù)庫包括微軟的SQL Server,Oracle,MySql以及DB2等數(shù)據(jù)庫,這些數(shù)據(jù)庫的數(shù)據(jù)類型在命名、表示范圍等方面都有一定的差異。因此,在使用基于XML實(shí)現(xiàn)數(shù)據(jù)遷移時(shí),必然會出現(xiàn)數(shù)據(jù)類型的表示方式,格式等方面的不同。如表1所示,給出了Oracle 10g數(shù)據(jù)庫中常用數(shù)據(jù)類型與XML內(nèi)置數(shù)據(jù)類型之間的對應(yīng)映射關(guān)系[3]。
表1數(shù)據(jù)類型對應(yīng)關(guān)系
[[XMLSchema&Oracle10g&類型定義說明&String&Char(varchar2,nchar,nvarchar2)&字符串類型&Decimal&Number&任意精度和位數(shù)的十進(jìn)制數(shù)&Datatime(data,time)&Data(timestamp)&時(shí)間類型&Blob&Blob(long,cblob,nblob)&二進(jìn)制大對象數(shù)據(jù)&Boolean&Char等&二元boolean類型,true或false&]]
Oracle數(shù)據(jù)庫中數(shù)據(jù)類型與XML數(shù)據(jù)類型的對應(yīng)關(guān)系如表1所示。要基于XML實(shí)現(xiàn)異構(gòu)數(shù)據(jù)庫間的數(shù)據(jù)遷移,就必須由程序?qū)崿F(xiàn)不同數(shù)據(jù)庫和XML類型之間的轉(zhuǎn)換關(guān)系,可以用兩種方法實(shí)現(xiàn)這種自動轉(zhuǎn)換,一是在數(shù)據(jù)導(dǎo)入導(dǎo)出以前,由用戶手動指定對應(yīng)的數(shù)據(jù)類型跟映射關(guān)系。二是直接交由程序自動完成不同數(shù)據(jù)類型的映射關(guān)系??紤]到方便用戶的實(shí)際操作以及保證數(shù)據(jù)類型對應(yīng)關(guān)系的合理性,本方法采用后者實(shí)現(xiàn)數(shù)據(jù)類型的自動轉(zhuǎn)換。
2.2 XML文件的導(dǎo)出與導(dǎo)入
基于XML的數(shù)據(jù)遷移工具,實(shí)現(xiàn)數(shù)據(jù)的導(dǎo)入與導(dǎo)出兩大基本功能。數(shù)據(jù)的導(dǎo)出功能使用者主要來自于供貨商。供貨商使用該工具時(shí),首先在登錄項(xiàng)中選擇登錄的數(shù)據(jù)庫,填寫數(shù)據(jù)庫用戶名、登錄密碼等信息,登錄成功后,用戶選擇需要導(dǎo)出的表,以及表中數(shù)據(jù),即可完成從數(shù)據(jù)庫到XML文件的導(dǎo)出工作。在此過程中,程序會根據(jù)用戶選擇的表以及選擇要導(dǎo)出數(shù)據(jù),完成關(guān)系數(shù)據(jù)庫到XML文件的導(dǎo)出工作。在導(dǎo)出的XML文檔中,表中各列內(nèi)容以XML文檔元素表示,表中字段屬性以元素屬性表示。示例文件如圖1所示。
數(shù)據(jù)遷移工具的第二功能是數(shù)據(jù)的導(dǎo)入功能,該功能主要使用者是銷售商,在銷售商獲得新加商品的同時(shí),會隨商品同時(shí)獲得一份商品信息說明文檔(即上一部分供貨商導(dǎo)出的XML文檔)。在導(dǎo)入數(shù)據(jù)前,同樣需要用戶填寫數(shù)據(jù)庫名,登錄密碼等信息,登錄所要操作的數(shù)據(jù)庫,接著要求用戶選擇導(dǎo)入的XML文件,以及對應(yīng)的導(dǎo)入目標(biāo)表,最后會要求用戶將XML對應(yīng)的元素信息與目標(biāo)表中的列相互映射,從而確定數(shù)據(jù)的正確導(dǎo)入。在使用遷移工具將XML格式的文檔導(dǎo)入數(shù)據(jù)庫是,程序會根據(jù)XML文檔中元素的屬性說明,結(jié)合數(shù)據(jù)庫表中的字段信息,如果兩者相吻合,則直接導(dǎo)入數(shù)據(jù),若出現(xiàn)導(dǎo)入錯誤,則會及時(shí)提示用戶出錯原因,比如導(dǎo)入數(shù)據(jù)長度超出實(shí)際要求等,用戶會根據(jù)錯誤提示修改導(dǎo)入文件或者導(dǎo)入方式,重新進(jìn)行導(dǎo)入。數(shù)據(jù)遷移工具的流程圖如圖2所示。
圖1數(shù)據(jù)的XML表示
[用戶登錄][操作結(jié)束、退出][用戶選擇操作] [用戶選擇導(dǎo)出表,
選擇導(dǎo)出數(shù)據(jù)][填寫導(dǎo)出XML
名稱,保存][成功] [繼續(xù)操作] [錯誤提示,用戶
重新執(zhí)行操作][用戶選擇導(dǎo)入目標(biāo)表][選擇導(dǎo)入XML文件][系統(tǒng)執(zhí)行導(dǎo)入][成功] [錯誤提示,用戶
重新執(zhí)行操作] [Y][N][Y] [N] [N]
圖2遷移工具流程圖
3 實(shí)驗(yàn)結(jié)果驗(yàn)證
基于XML實(shí)現(xiàn)異構(gòu)數(shù)據(jù)庫數(shù)據(jù)交換工具采用XML作為中間件,實(shí)現(xiàn)了MySql 5.1、SqlServer2005與Oracle 10g三者之間的數(shù)據(jù)遷移[4],在工具驗(yàn)證過程中,分別進(jìn)行數(shù)據(jù)的導(dǎo)入與導(dǎo)出驗(yàn)證,利用某商場進(jìn)銷存管理系統(tǒng)中的部分?jǐn)?shù)據(jù)作為實(shí)驗(yàn)數(shù)據(jù),模擬供貨商,分別從不同的三種數(shù)據(jù)庫中將商品信息導(dǎo)入XML格式文檔,然后交由銷售商進(jìn)行不同數(shù)據(jù)庫間的導(dǎo)入操作,實(shí)驗(yàn)結(jié)果證明采用該工具既可以圓滿完成異構(gòu)數(shù)據(jù)庫間的數(shù)據(jù)遷移,又極大地提高了數(shù)據(jù)的錄入效率,大大避免了手工錄入數(shù)據(jù)時(shí)準(zhǔn)確性差,效率低的缺點(diǎn)[5]。
4 結(jié)束語
結(jié)合當(dāng)前商場、超市等進(jìn)銷存系統(tǒng)中數(shù)據(jù)更新變換迅速,手工錄入或依靠第三方平臺錄入中存在的不足,實(shí)現(xiàn)了異構(gòu)數(shù)據(jù)庫間簡單、快速及時(shí)的商品信息遷移功能,極大地方便了供貨商與銷售商對商品基本信息的使用。
參考文獻(xiàn):
[1] 李剛.瘋狂XML講義[M].電子工業(yè)出版社,2009.
[2] 楊芳,陶世群.基于XML異構(gòu)數(shù)據(jù)庫系統(tǒng)的集成設(shè)計(jì)[J].計(jì)算機(jī)工程
與設(shè)計(jì),2005.7.
[3] Chang B. et al.Oracle XML開發(fā)手冊[M].機(jī)械工業(yè)出版社,2001.
[4] Jon Skeet著,朱永光譯.深入解析C#[M].人民郵電出版社,2010.
[5] (美)Thomas Kyte著,蘇金國,王小振等譯.Oracle Database 9i/
10g/11g編程藝術(shù)深入數(shù)據(jù)庫體系結(jié)構(gòu)[M].人民郵電出版社,
2011.