移植實(shí)務(wù):從Access到MySQL

字號(hào):

很多MySQL用戶都有過(guò)將Access移植到MySQL的計(jì)劃,不過(guò)這個(gè)移植過(guò)程性能和實(shí)踐的相關(guān)描述資料很少。本文將為大家總結(jié)將Access應(yīng)用程序成功移植到MySQL的要點(diǎn)和注意事項(xiàng)。
    由于Access應(yīng)用程序往往是以即席(ad hoc)模式創(chuàng)建的,移植難度很大。MySQL用戶通常會(huì)遇到的兩個(gè)移植問(wèn)題是:第一,數(shù)據(jù)移植問(wèn)題,由于Access模式設(shè)計(jì)較差,數(shù)據(jù)質(zhì)量很低,往往會(huì)造成數(shù)據(jù)轉(zhuǎn)換過(guò)程很復(fù)雜;第二,應(yīng)用程序移植問(wèn)題,Access應(yīng)用程序中的窗體和報(bào)表常包含了邏輯或設(shè)計(jì)錯(cuò)誤,不可能實(shí)現(xiàn)這些文件的自動(dòng)轉(zhuǎn)換。
    成功的移植途徑要完成以下三個(gè)基本任務(wù):重構(gòu)模式、清洗數(shù)據(jù)和重寫應(yīng)用程序。
    從Access到MySQL的移植動(dòng)因
    Access數(shù)據(jù)庫(kù)由于其操作簡(jiǎn)單易用,成本較低在中小企業(yè)中的市場(chǎng)非常廣闊。中等技術(shù)程度的部門開發(fā)人員都會(huì)把Access作為數(shù)據(jù)庫(kù)開發(fā)的默認(rèn)選擇。大家往往通過(guò)將企業(yè)數(shù)據(jù)下載到Excel里,然后將電子表格轉(zhuǎn)換成Access數(shù)據(jù)庫(kù),然后添加即席窗體和報(bào)表來(lái)構(gòu)建Access應(yīng)用程序。由于這些程序由用戶組織構(gòu)建的,所以往往缺乏對(duì)數(shù)據(jù)形式的要求。
    在Access應(yīng)用軟件移植上,MySQL用戶面臨的壓力越來(lái)越大,包括以下幾個(gè)方面:
    數(shù)據(jù)質(zhì)量低下:Access應(yīng)用程序常常包含了過(guò)期的企業(yè)數(shù)據(jù)或來(lái)自拙劣定義模式下的損壞數(shù)據(jù);
    安全性能低下:Access應(yīng)用程序沒(méi)有嵌入企業(yè)安全組件,不允許進(jìn)行類似于基于角色的訪問(wèn)控制等的高級(jí)安全設(shè)置;
    可管理性有限:網(wǎng)絡(luò)技術(shù)無(wú)法集中管理Access應(yīng)用程序;
    沒(méi)有基于網(wǎng)絡(luò)發(fā)布機(jī)制:Access應(yīng)用程序無(wú)法通過(guò)網(wǎng)絡(luò)進(jìn)行訪問(wèn);
    不符合SOX依從性:企業(yè)的審核程序往往會(huì)把Access應(yīng)用程序看作是一個(gè)重要的風(fēng)險(xiǎn)來(lái)源。
    數(shù)據(jù)移植問(wèn)題
    MySQL本身提供了一個(gè)數(shù)據(jù)移植工具—— MySQL Migration Tool。不過(guò)這個(gè)工具實(shí)際上和待轉(zhuǎn)換的數(shù)據(jù)庫(kù)的基本模式和數(shù)據(jù)一樣并不好用。而Access的模式和數(shù)據(jù)質(zhì)量問(wèn)題太過(guò)深入且普遍存在,所以MySQL用戶常常會(huì)發(fā)現(xiàn)在MySQL從頭開始重建數(shù)據(jù)模式還有來(lái)得更容易些。
    Access移植過(guò)程中最兩個(gè)常見(jiàn)的與數(shù)據(jù)質(zhì)量相關(guān)的問(wèn)題是:
    1. Access數(shù)據(jù)模式不是基于SQL的模式:Access開發(fā)人員往往不熟悉SQL模式設(shè)計(jì)基礎(chǔ)。MySQL的數(shù)據(jù)庫(kù)管理員會(huì)發(fā)現(xiàn),Access模式類似于Excel的電子表格,而和典型的SQL模式相去甚遠(yuǎn)。例如,這種模式缺乏主鍵、外鍵和參照完整性約束。
    2. Access數(shù)據(jù)“不干凈”:Access數(shù)據(jù)庫(kù)中往往包含很多毀壞的數(shù)據(jù),其中部分原因是由于沒(méi)有對(duì)表進(jìn)行嚴(yán)格定義。有MySQL用戶曾經(jīng)發(fā)現(xiàn)在一個(gè)Access數(shù)據(jù)庫(kù)中,在本來(lái)應(yīng)該是日期字段的區(qū)域填入的卻是文本字符串。
    應(yīng)用程序移植問(wèn)題
    成功把數(shù)據(jù)從Access接入到MySQL僅僅解決了一部分問(wèn)題,還需要處理與Access應(yīng)用程序相關(guān)的窗體和報(bào)表問(wèn)題。此外,你可以把多個(gè)Access應(yīng)用整合成一個(gè)web應(yīng)用;同樣的,還可以把多個(gè)Access窗體整合成一個(gè)網(wǎng)頁(yè)。雖然可以用ODBC從Access存取MySQL數(shù)據(jù),不過(guò)大多數(shù)MySQL用戶還是選擇重新編寫應(yīng)用程序。其中的原因包括:
    質(zhì)量問(wèn)題:鑒于原始的Access應(yīng)用程序不是由專業(yè)的編程人員寫的,MySQL用戶對(duì)其邏輯可行性往往持有懷疑態(tài)度。
    想要是應(yīng)用程序適用于網(wǎng)絡(luò):大多數(shù)MySQL用戶都想把Access應(yīng)用程序轉(zhuǎn)換成動(dòng)態(tài)的網(wǎng)絡(luò)架構(gòu)。
    出于安全要求:MySQL用戶往往希望為程序加入企業(yè)級(jí)的安全特性,例如Siteminder/LDAP驗(yàn)證和基于角色的訪問(wèn)控制機(jī)制等。
    雖然有現(xiàn)成的工具可以將Access應(yīng)用程序自動(dòng)轉(zhuǎn)換成Java,不過(guò)大部分MySQL用戶發(fā)現(xiàn)自動(dòng)轉(zhuǎn)換的成功率很低。一條可行的途徑是使用類似于PHP的編程語(yǔ)言或ActiveGrid這樣的web 2.0 visual builder來(lái)接入Access應(yīng)用程序。