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