金天昕
(無錫南洋職業(yè)技術(shù)學(xué)院,江蘇 無錫 214081)
隨著互聯(lián)網(wǎng)地普及、數(shù)據(jù)庫技術(shù)地發(fā)展及信息化程度地加深,越來越多的數(shù)據(jù)被存放在異構(gòu)數(shù)據(jù)中,同時越來越多的信息系統(tǒng)需要共享異構(gòu)數(shù)據(jù)庫中數(shù)據(jù),因而,目前異構(gòu)數(shù)據(jù)庫的管理信息系統(tǒng)開發(fā)的關(guān)鍵逐漸傾向于不同數(shù)據(jù)庫之間連接、交換和共享功能地實(shí)現(xiàn),使異構(gòu)數(shù)據(jù)庫中的數(shù)據(jù)不再是一個“信息孤島”。
XML異構(gòu)數(shù)據(jù)遷移技術(shù)
異構(gòu)數(shù)據(jù)庫的遷移時應(yīng)根據(jù)以下兩種方式來考慮該選哪種遷移方式,一種是完整地將源數(shù)據(jù)庫信息移到目標(biāo)數(shù)據(jù)庫中;另一種是目標(biāo)數(shù)據(jù)庫中已有相關(guān)記錄,遷移時只需將源數(shù)據(jù)庫信息根據(jù)目標(biāo)數(shù)據(jù)庫的結(jié)構(gòu)對應(yīng)遷移上去。
在異構(gòu)數(shù)據(jù)遷移過程中,比較關(guān)鍵的環(huán)節(jié)是庫信息地正確獲取,尤其是數(shù)據(jù)庫中數(shù)據(jù)表的相關(guān)信息地獲取。本文中筆者通過JDBC來連接到數(shù)據(jù)庫,并利用特定SQL語句地執(zhí)行來將數(shù)據(jù)表中列數(shù)、長度、列名、主鍵、允許空等基本屬性取出,為生成相應(yīng)的描述該表的XML Schema做充足準(zhǔn)備。
“select c.name name,t.name type,c.1ength length,C.isnullable,
(case when (SELECT count(*)FROM sysobjectsWHERE(name in
(SELECT nanle FROM sysindexes
WHERE(id=c.id)AND(indid in
(SELECT indid FROM sysindexkeys
WHERE(id=C.id)AND(colid in
(SELECT colid FROM syscolumns
WHERE(id=C.id)AND(name=C.name)))))))AND
(xtype=PK))>0 then 1'elseO'end)Nkey//取主鍵
from syscolumns C join systypes t on c.xusertype=t.xusertype
where id= (selectid from sysobjects where name=“+table+”)”//取設(shè)計表中的數(shù)據(jù),依次為列名、數(shù)據(jù)類型、長度、允許空、主鍵。
數(shù)據(jù)模型映射方法
異構(gòu)數(shù)據(jù)庫的數(shù)據(jù)遷移是通過文檔結(jié)構(gòu)和數(shù)據(jù)庫結(jié)構(gòu)之間建立的映射關(guān)系來完成的,即將數(shù)據(jù)和數(shù)據(jù)類型分別映射為XML文檔和XML Schema文檔的形式?;谀J津?qū)動的映射是指通過一個具體的模型來實(shí)現(xiàn)數(shù)據(jù)庫與XML文檔之間的相互傳送,在該映射過程中除了內(nèi)嵌SQL命令被依賴外,關(guān)系模型被關(guān)系數(shù)據(jù)庫依賴,對象模型被面向?qū)ο髷?shù)據(jù)依賴,Schema對應(yīng)的數(shù)據(jù)模型則被XML文檔依賴。基于模式驅(qū)動的映射可以將XML Schema文件中的復(fù)雜原始類型改為簡單化,方便用戶數(shù)據(jù)分割和理解。數(shù)據(jù)類型有其相對應(yīng)的規(guī)則,即不同的數(shù)據(jù)庫及同一數(shù)據(jù)庫廠商的不同版本的數(shù)據(jù)庫產(chǎn)品之間對數(shù)據(jù)類型的定義是不同的。
在數(shù)據(jù)庫信息與XML Schema之間建立并實(shí)現(xiàn)雙向映射可以使基于模型驅(qū)動實(shí)現(xiàn)數(shù)據(jù)庫與XML文檔之間數(shù)據(jù)的雙向傳輸。在生成的XML Schema文檔對設(shè)計表里面元素的基本屬性做了基本的描述,以在異構(gòu)數(shù)據(jù)遷移時可以更完整地表述數(shù)據(jù)庫信息,如表名稱—ref、長度—value、類型—base、字段名稱—name、主鍵—xs:key,等等。對于XML Schema文檔中SQL Server2000數(shù)據(jù)庫內(nèi)某個表bjdmb的相關(guān)信息可以如以下一段編程來表示。
maxOccurs=”unbounded”/>//表中完整數(shù)據(jù)出現(xiàn)次數(shù)
從數(shù)據(jù)庫映射到XML文檔的過程中,可以通過屬性中心和元素中心兩種形式表示,這兩種形式都可以指定這些元素或?qū)傩缘拿?。但前者不可對各字段的先后順序進(jìn)行表述,也比較難在屬性中保存應(yīng)用程序操作,因而,一般情況下都選用元素中心的形式來表示,以實(shí)現(xiàn)異構(gòu)數(shù)據(jù)庫間數(shù)據(jù)交換中XML中間層的構(gòu)建。下面是一段XML代碼指的是中SQL Server2000數(shù)據(jù)庫內(nèi)一個表bjdmb中的一組數(shù)據(jù),即bjdm、bj、njdm的映射。
遷移過程可視化控制是指用戶在前臺控制端就可根據(jù)遷移的具體要求,通過論文原型遷移平臺來完成異構(gòu)系統(tǒng)間數(shù)據(jù)的遷移工作。在該遷移過程中,后臺異構(gòu)數(shù)據(jù)庫間具體差異用戶可以完全不做考慮。本文中筆者對前臺用戶可視化界面的設(shè)計與實(shí)現(xiàn)采用的是JSP和JavaBean系統(tǒng)。
根據(jù)異構(gòu)數(shù)據(jù)遷移系統(tǒng)的層次結(jié)構(gòu)圖我們可以將該系統(tǒng)分為5個模塊,即數(shù)據(jù)庫連接模塊、數(shù)據(jù)導(dǎo)入模塊、數(shù)據(jù)操作模塊、數(shù)據(jù)遷移模塊和數(shù)據(jù)展示模塊。其中數(shù)據(jù)庫連接模塊主要用于實(shí)現(xiàn)將要被遷移的源數(shù)據(jù)庫的設(shè)定和連接;數(shù)據(jù)導(dǎo)入模塊主要負(fù)責(zé)源數(shù)據(jù)庫中需要進(jìn)行遷移的數(shù)據(jù)的遷移工作;數(shù)據(jù)操作模塊主要功能是用戶對轉(zhuǎn)換過程中一些如需修改的表名、列名、庫名及需進(jìn)行添加或刪除的字段等轉(zhuǎn)換具體需求地設(shè)定;數(shù)據(jù)遷移模塊主要負(fù)責(zé)交換和關(guān)聯(lián)規(guī)則地設(shè)定;數(shù)據(jù)展示模塊,顧名思義就是在屏幕上向用戶展示遷移過程和結(jié)果,以方便用戶監(jiān)控。
[1]龐海濤.XML在異構(gòu)數(shù)據(jù)交換中的研究與應(yīng)用[D].湖北:武漢理工大學(xué)碩士論文,2006.
[2]都志輝.XML編程實(shí)踐[M].北京:清華大學(xué)出版社,2002.