專利名稱:基于跟蹤的數(shù)據(jù)庫模式演進方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及對數(shù)據(jù)庫的演進,具體來說,涉及一種基于跟蹤的數(shù) 據(jù)庫模式演進方法及系統(tǒng)。
背景技術(shù):
在現(xiàn)今的商業(yè)服務(wù)應(yīng)用領(lǐng)域中,隨著用戶需求的不斷變化,商業(yè)
服務(wù)的邏輯以及其數(shù)據(jù)庫模式(schema)也相應(yīng)地進行演進。例如, SaaS (服務(wù)式軟件)系統(tǒng)可以通過一種系統(tǒng)設(shè)計來服務(wù)于不同的終端 用戶。在服務(wù)式軟件系統(tǒng)中,隨著用戶數(shù)量以及用戶類型的增加,對 于解決方案的靈活性和個性化的需求越重要。例如,可能由于功 能性設(shè)計和/或非功能性設(shè)計的原因,需要對商業(yè)服務(wù)的邏輯以及數(shù)據(jù) 庫模式進行改變。 一般來說,在商業(yè)服務(wù)的整個壽命周期期間,商業(yè) 服務(wù)系統(tǒng)需要不斷演進。
在商業(yè)服務(wù)系統(tǒng)的演進過程中,數(shù)據(jù)庫模式的演進和商業(yè)邏輯的 演進應(yīng)當(dāng)同步。另外,對于發(fā)生演進之后的商業(yè)服務(wù)系統(tǒng)而言,原商 業(yè)服務(wù)系統(tǒng)中的數(shù)據(jù)可能仍然是重要,因此,需要根據(jù)數(shù)據(jù)庫模式的 改變來正確地移植數(shù)據(jù)。
然而,在現(xiàn)有技術(shù)中,商業(yè)邏輯改變和數(shù)據(jù)庫模式演進是在沒有 集成工具支持的情況下被分開處理的。因此,在現(xiàn)有技術(shù)中,商業(yè)服 務(wù)系統(tǒng)的演進耗時、復(fù)雜且容易出錯,并且,在商業(yè)邏輯的模型設(shè)計 和數(shù)據(jù)庫模式演進的結(jié)果之間容易產(chǎn)生差異。
例如,圖1示意性地說明了現(xiàn)有技術(shù)中可能產(chǎn)生的問題。
現(xiàn)今,通常采用模型驅(qū)動的代碼產(chǎn)生技術(shù)來為商業(yè)邏輯產(chǎn)生代碼。 其中,首先由設(shè)計人員設(shè)計用于商業(yè)服務(wù)的設(shè)計模型,然后,開發(fā)人 員基于設(shè)計模型產(chǎn)生代碼并由此創(chuàng)建符合設(shè)計的商業(yè)邏輯。
4如圖1所示,當(dāng)需求發(fā)生改變時,設(shè)計人員利用設(shè)計模型修改工
具101對設(shè)計模型進行修改,并將修改后的新設(shè)計模型分別提供給開
發(fā)人員和數(shù)據(jù)庫管理員。
一方面,開發(fā)人員將新設(shè)計模型導(dǎo)入模型驅(qū)動工具111。模型驅(qū)
動工具111對設(shè)計模型進行解析。接著,代碼生成器112根據(jù)解析結(jié) 果產(chǎn)生代碼。商業(yè)邏輯編譯器113利用產(chǎn)生的代碼創(chuàng)建相應(yīng)的商業(yè)邏 輯。
另一方面,在與創(chuàng)建所述商業(yè)邏輯完全不同的環(huán)境中,數(shù)據(jù)庫管 理員(DBA)利用數(shù)據(jù)庫重構(gòu)裝置121對新設(shè)計模型進行操作,以產(chǎn) 生重構(gòu)點(Refactor Point)文件。然后,利用重構(gòu)點文件,模式演進 腳本(script)生成裝置122可以生成模式演進腳本,以及數(shù)據(jù)移植腳 本生成工具123可以生成數(shù)據(jù)移植腳本。接著,利用測試數(shù)據(jù)庫124 對模式演進腳本和數(shù)據(jù)移植腳本進行測試。
在現(xiàn)有技術(shù)中,數(shù)據(jù)庫管理員需要手動地分析新設(shè)計模型來產(chǎn)生 重構(gòu)點文件,因此,所產(chǎn)生的腳本和所產(chǎn)生的代碼之間很容易產(chǎn)生不 一致性。盡管在現(xiàn)有技術(shù)中數(shù)據(jù)庫管理員和開發(fā)人員可以通過其它方 式進行額外的溝通來消除這種不一致性,但是,這在一定程度上增加 了商業(yè)服務(wù)系統(tǒng)演進的復(fù)雜程度和成本。
另外,由于手動產(chǎn)生重構(gòu)點文件,因此,不能夠確保重構(gòu)點文件 完全正確反映對設(shè)計模型的修改。因此,在對模式演進腳本和數(shù)據(jù)移 植腳本的調(diào)試過程中還可能需要對重構(gòu)點文件進行修改。這在某種程 度上還會增加數(shù)據(jù)庫演進的復(fù)雜程度和成本。
在De印ak S. Elandassery等人的申請曰為2003年9月25曰、申 請?zhí)枮?0/670,947、發(fā)明名稱為"Method for Automated Database Schema Evolution"的美國專利申請(以下稱為對比文件1)中公開了 一種自動數(shù)據(jù)庫模式演進的方法,該專利申請在此引入作為參考。在 對比文件1中,將新數(shù)據(jù)庫和舊數(shù)據(jù)庫的模式文件進行比較,以找到 二者之間的差別,并根據(jù)所述差別來進行數(shù)據(jù)庫模式演進。在對比文 件1中不涉及數(shù)據(jù)移植。在KangGe等人的申請日為2004年12月17、申請?zhí)枮?1/016,228、發(fā)明名稱為“DirrerentialManagementornatabaseschemachanges”的美國專利申請(以T稱為對比文件2)中公開T一種數(shù)據(jù)庫模式演進的方法,該專利申請在此引入作為參考。與對比文件1類似,在對比文件2中,將新數(shù)據(jù)庫和舊數(shù)據(jù)庫的模式文件進行比較,以找到二者之間的差別,并根據(jù)所述差別來進行數(shù)據(jù)庫模式演進.
在對比文件1和2的技術(shù)方案中同樣存在上面所述的問題。
另外,在對比文件1和2中,通過比較新數(shù)據(jù)庫和舊數(shù)據(jù)庫的模式文件來找到二者之間的差別,但是這種方式不能夠或者很難跟蹤數(shù)據(jù)庫模式改變時的語義信息。
因此,需要一種新的技術(shù)方案來解決上述現(xiàn)有技術(shù)中的問題。
發(fā)明內(nèi)容
為了解決上述問題,本發(fā)明設(shè)計了一種基于跟蹤的數(shù)據(jù)庫模式演進方法及系統(tǒng)。
根據(jù)本發(fā)明的第一方面,提供了一種集成的基于跟蹤的數(shù)據(jù)庫模式演進方法,包括以下步驟導(dǎo)入原設(shè)計模型;在編輯原設(shè)計模型時,跟蹤并記錄對原設(shè)計模型的更改;以及根據(jù)所述對原設(shè)計模型的更改來生成模式演進腳本和數(shù)據(jù)移植腳本。
在本發(fā)明的第一方面的一個實施例中,利用可擴展操作集來跟蹤和記錄對原設(shè)計模型的更改;以及利用可擴展操作集來生成模式演進腳本和數(shù)據(jù)移植腳本。例如,所述可擴展操作集可以包括增加操作、刪除操作、更改名稱操作和移動操作等。
在本發(fā)明的第一方面的另一個實施例中,利用中間文件來跟蹤和記錄對設(shè)計模型的更改。
在本發(fā)明的第一方面的另一個實施例中,對原設(shè)計模型進行解析以生成中間文件。
在本發(fā)明的第一方面的另一個實施例中,基于中間文件來同源地生成模式演進腳本和數(shù)據(jù)移植腳本。
根據(jù)本發(fā)明的第二方面,提供了一種集成的基于跟蹤的數(shù)據(jù)庫模
式演進系統(tǒng),包括模式編輯器,用于編輯原設(shè)計模型并同時跟蹤和
記錄對原設(shè)計模型的更改;以及腳本生成器,用于根據(jù)所述對原設(shè)計
模型的更改來生成模式演進腳本和數(shù)據(jù)移植腳本。
在本發(fā)明的第二方面的一個實施例中,所述系統(tǒng)還包括與模式 編輯器和腳本生成器耦合的可擴展操作集模塊,可擴展操作集模塊用
于維護可擴展操作集,其中,可擴展操作集包含能對設(shè)計模型執(zhí)行的 操作類型以及相應(yīng)的模式演進腳本模板和數(shù)據(jù)移植腳本模板。例如, 所述可擴展操作集可以包括增加操作、刪除操作、更改名稱操作和移 動操作等。
在本發(fā)明的第二方面的另一個實施例中,所述模型編輯器包含中 間文件,其中所述中間文件用于跟蹤和記錄對設(shè)計模型的更改。
在本發(fā)明的第二方面的另一個實施例中,所述系統(tǒng)還包括與模 型編輯器耦合的模型解析器,用于對原設(shè)計模型進行解析以生成中間 文件。
在本發(fā)明的第二方面的另一個實施例中,所述腳本生成器基于中 間文件來同源地生成模式演進腳本和數(shù)據(jù)移植腳本。
本發(fā)明的一個優(yōu)點在于根據(jù)本發(fā)明,采用集成的方式來生成新 設(shè)計模型、模式演進腳本和數(shù)據(jù)移植腳本,從而能夠保證它們之間的 一致性并且減少了工作量。
本發(fā)明的另一個優(yōu)點在于根據(jù)本發(fā)明,在編輯設(shè)計模型的同時 跟蹤和記錄對設(shè)計模型的更改,從而能夠保證對設(shè)計模型的修改以及 模式演進腳本和數(shù)據(jù)移植腳本之間的一致性。
根據(jù)本發(fā)明可以完整地記錄對設(shè)計模型進行更改時的語義信息, 這有利于簡化數(shù)據(jù)庫演進和數(shù)據(jù)移植時的操作。
根據(jù)本發(fā)明,采用可擴展操作集,其中,可擴展操作集可以是預(yù) 先定義的,或者可以由數(shù)據(jù)庫管理員根據(jù)需要進行修改,這提供了靈 活性。
7另外,采用可擴展操作集可以使對設(shè)計模型的操作標(biāo)準(zhǔn)化,從而 減少了設(shè)計時產(chǎn)生錯誤的可能性。
另外,可擴展操作集是可重復(fù)使用的,因此,減少了設(shè)計人員的 工作量。
根據(jù)本發(fā)明,中間文件記錄對設(shè)計模型的更改,而腳本模板被保 存在可擴展操作集中。因此,可以獨立于中間文件來對所述腳本進行 修改和調(diào)試,這增加了生成腳本的靈活性。
參照附圖,根據(jù)下面的詳細(xì)描述,可以更加清楚地理解本發(fā)明,
其中
圖l是示意性地示出了現(xiàn)有技術(shù)的用于商業(yè)邏輯以及數(shù)據(jù)庫演進 的系統(tǒng)。
圖2是示意性地示出根據(jù)本發(fā)明的集成的基于跟蹤的數(shù)據(jù)庫模式 演進系統(tǒng)的框圖。
圖3是示意性地示出根據(jù)本發(fā)明的集成的基于跟蹤的數(shù)據(jù)庫模式 演進方法的流程圖。
圖4示出了對根據(jù)本發(fā)明的集成的基于跟蹤的數(shù)據(jù)庫模式演進系 統(tǒng)的實際應(yīng)用的例子。
具體事實方式
為了簡明和清楚起見,在不同附圖中,相同參考標(biāo)記表示相同的 單元。此外,為了描述的簡明以及不會在不必要的方面使得本發(fā)明模 糊,而省略了關(guān)于公知步驟和單元的描述和細(xì)節(jié)。
本領(lǐng)域的普通技術(shù)人員應(yīng)該明白,前面的一般描述和下面的詳細(xì) 描述是對發(fā)明進行舉例和說明的,而不是為了對本發(fā)明進行限制的。
下面通過例子來說明本發(fā)明的技術(shù)方案。
數(shù)據(jù)庫的演進可以包括但不限于以下幾種情況
-在數(shù)據(jù)庫的表中刪除列;-在數(shù)據(jù)庫的表中增加列; -更改數(shù)據(jù)庫的表中的列的名稱;以及
-將數(shù)據(jù)庫的表中的列移動到其它位置,例如,在表中將一個列 從一個位置移動到另 一個位置,或者將一個表中的列移動到另 一個表 中。
數(shù)據(jù)庫的演進還包括許多其它情況,上面所列舉的情況僅僅是示 例性的。
數(shù)據(jù)庫的演進包括模式演進和數(shù)據(jù)移植,其中,數(shù)據(jù)庫的模式是 指數(shù)據(jù)庫的表結(jié)構(gòu)、索引、列信息等信息。
通常,數(shù)據(jù)庫管理員會利用模式演進腳本和數(shù)據(jù)移植腳本來對數(shù) 據(jù)庫進行演進。在數(shù)據(jù)庫演進過程中,可以利用模式演進腳本來改變 數(shù)據(jù)庫的模式。例如,數(shù)據(jù)庫管理員可以利用模式演進腳本在數(shù)據(jù)庫 的表中增加、刪除、更改或移動列。通過數(shù)據(jù)移植腳本,數(shù)據(jù)庫管理 員可以將原數(shù)據(jù)庫中的數(shù)據(jù)移植到演進之后的數(shù)據(jù)庫中。例如,將原 數(shù)據(jù)庫的列中的數(shù)據(jù)移植到演進后的數(shù)據(jù)庫中與該列對應(yīng)的列中。
本發(fā)明的集成的基于跟蹤的數(shù)據(jù)庫模式演進系統(tǒng)包括模式編輯 器,用于編輯原設(shè)計模型并同時跟蹤和記錄對原設(shè)計模型的更改;以 及腳本生成器,用于根據(jù)所述對原設(shè)計模型的更改來生成模式演進腳 本和數(shù)據(jù)移植腳本。
下面參照圖2來說明本發(fā)明的基于跟蹤的數(shù)據(jù)庫模式演進系統(tǒng)的 結(jié)構(gòu)。
例如,當(dāng)商業(yè)需求發(fā)生改變時,設(shè)計人員可以利用根據(jù)本發(fā)明的 基于跟蹤的數(shù)據(jù)庫模式演進系統(tǒng)200來對原設(shè)計模型進行修改,以生 成新設(shè)計模型。
設(shè)計模型是用于描述數(shù)據(jù)對象關(guān)系的模型,其例如可以是類圖、 實體關(guān)系(ER)映射或?qū)ο箨P(guān)系(OR)映射等。當(dāng)需求發(fā)生改變時, 設(shè)計人員可以對原設(shè)計模型進行修改,以反映和實現(xiàn)所述改變。
根據(jù)本發(fā)明的基于跟蹤的數(shù)據(jù)庫模式演進系統(tǒng)200為設(shè)計人員提 供了 一種用于生成設(shè)計模型、模式演進腳本和數(shù)據(jù)移植腳本的集成環(huán)境。如圖2所示,根據(jù)本發(fā)明的系統(tǒng)200包括模型編輯器210、模型 解析器220、可擴展操作集模塊230以及腳本生成器240。
原設(shè)計模型被導(dǎo)入根據(jù)本發(fā)明的基于跟蹤的數(shù)據(jù)庫模式演進系統(tǒng) 200。設(shè)計人員可以在模型編輯器210中對所導(dǎo)入的原設(shè)計模型進行編 輯。
根據(jù)本發(fā)明的集成的基于跟蹤的數(shù)據(jù)庫模式演進系統(tǒng)200還包括 與模式編輯器210和腳本生成器240耦合的可擴展操作集模塊230, 可擴展操作集模塊230用于維護可擴展操作集,其中,可擴展操作集 包含能對設(shè)計模型執(zhí)行的操作類型以及相應(yīng)的模式演進腳本模板和數(shù) 據(jù)移植腳本模板。
在一個實施例中,用戶可以預(yù)先定義對設(shè)計模型所進行的編輯操 作(編輯類型),其中,在可擴展操作集模塊230中預(yù)先定義所述編 輯類型。
下面描述了一個對設(shè)計模型進行編輯的例子,其中,設(shè)計人員使 用模型編輯器210將一個新的字段添加到設(shè)計模型的數(shù)據(jù)對象中。首 先,設(shè)計人員選中設(shè)計模型的設(shè)計對象并選擇所需的編輯類型(在此 為添加操作)。接著,設(shè)計人員將新的字段添加到數(shù)據(jù)對象中??蛇x 地,用戶還可以輸入所述字段的初始數(shù)據(jù)。
例如,所述編輯類型可以是更改實體名稱、更改屬性類型、更改 屬性名稱、更改屬性值、更改關(guān)系、刪除實體、刪除屬性、刪除關(guān)系 和移動實體等。本領(lǐng)域普通技術(shù)人員應(yīng)當(dāng)知道,所述編輯類型不限于 上面的例子。
在一個實施例中,所述可擴展操作集包括增加操作、刪除操作、 更改名稱操作和移動操作中的至少一種操作。
模型編輯器210還跟蹤對原設(shè)計模型的更改。
在一個實施例中,模型跟蹤器210維護一個中間文件211。中間 文件211用于記錄設(shè)計模型的信息以及對設(shè)計模型的更改的跟蹤信 息。具體來說,中間文件211可以包含但不限于組成設(shè)計模型的實 體;組成每個實體的屬性;各個屬性的類型;實體之間的關(guān)系等。例如,中間文件可以是XML文件形式的,但是,本領(lǐng)域普通技術(shù)人員應(yīng)當(dāng)知道,中間文件的形式不限于XML文件。下面示例性地示出了一個中間文件的例子
< xml ve廣sion-"1.0" encoding = "UTF-8" >
-<xsd:schema xmlns:dsmodel="http://EasyManLib"
xmlns:xsd = "http://www,w3,org/2001/XMLSchema''
targetl\lamespace="http://EasyManLib"><xsd:element name="Model" type-"dsmodel:ModelType" />
- <xsd:complexType name="ModelType">-<xsd:sequence>
<xsd:element name="entity" type-"dsmode,EntityType" min〇ccurs="0" />〈xsd:element name="relationship" type=''dsmodel:Re,aWonType" minOccurs-"O" /><xsd:element name="version" type="xsd:str〗ng" minOccurs-"O" /></xsd:sequence>
<xsd:attribute name-"name" type-"xsd:string" />
</xsd: complexType>-<xsd:complexType name="EntityType">
-<xsd:s6quenc6>
<xsd:element name-"property" type="dsmodel:PropertyType" minOccurs-T /><xsd:element name="primaryKey" type="xsd:string" minOccLirs-"0" /><xsd:element name="foreignkey" type="xsd:string" minOccurs="0" /><xsd:element name="operation" type-"dsmodehOperationType" nVmOccurs="0" /></xsd:sequence>
<xsd:attribute name="Name" type-"xsd:string" /><xsd:attribute name="DBName" type-"xsd:string" /></xsd:complexType>
- <xsd:complexType name="RelationType">
- <xsd:sequence>
<xsd:element name="src" type="xsd:string" minOccurs=T />
<xsd:element name="des" type="xsd:string" minOccurs=T />
<xsd:element name="operation" type-"dsmodel:OperationType" minOccurs-"O" />
</xsd:sequence>
<xsd:attribute name="Name" type="xsd:string" /></xsd:complexType>-〈xsd:complexType name="PropertyType">
-<xsd:sequence>
<xsd:element name="operation" type-"dsmodel:OperationType" minOccurs-"O" /></xsd:sequence>
<xsd:attribute name="Name" type="xsd:string" />
<xsd:attribute name="Type" type-"xsd:string" />
<xsd:attribute name=''defaultValue" type="xsd:string" />
</xsd:complexType>- <xsd:complexType name="OperationType">
-<xsd:choice>
<xsd:element name="oldent,tyName" type-"xsd:string" minOccurs-"O" /><xsd:element name="newentityvalue" type="xsd:string" minOccurs-"O" /><xsd:element name=''oldpropertyvalue" type="dsmodel:PropertyType"
min〇ccurs = "0" />
<xsd:element name="newpropertyvalue" type-"dsmodel:PropertyType"
mi門Occurs O'1 />
<xsd:element name-"oldRelationship" type-"dsmodel:RelationType" minOccurs-"O/>
<xsd:element name-"newRelationship" type="dsmodel:RelationType"
minOccurs="0" /></xsd:choice>
<xsd:attribute narne="Name" type-"xsd:string" />
</xsd:complexType></xsd:schema>
借助于中間文件211,模型編輯器210可以跟蹤對設(shè)計模型的更改。例如,每當(dāng)模型編輯器210對設(shè)計模型進行編輯操作時,模型編輯器210都會在中間文件211中標(biāo)記所操作的數(shù)據(jù)對象、記錄相應(yīng)操作類型以及參數(shù)等。從而可以在中間文件中同步且準(zhǔn)確地記錄對設(shè)計模型所作的任何更改。例如,根據(jù)本發(fā)明,設(shè)計人員可以將一個表中的列移動到另一個表中,并在中間文件211中記錄所述操作。
當(dāng)完成對設(shè)計模型的編輯時,模型編輯器210可以輸出帶跟蹤標(biāo)記的中間文件和新的設(shè)計模型。
在一個實施例中,根據(jù)本發(fā)明的基于跟蹤的數(shù)據(jù)庫模式演進系統(tǒng)200還包括模型解析器220。模型解析器220用于對設(shè)計模型進行解析,以生成中間文件供模型編輯器210使用。
腳本生成器240接收來自模型編輯器210的帶跟蹤標(biāo)記的中間文件。利用所述帶跟蹤標(biāo)記的中間文件,腳本生成器240可以生成同源的模式演進腳本和數(shù)據(jù)移植腳本。
在一個實施例中,所述腳本生成器240還可以包括基于跟蹤信息的智能發(fā)現(xiàn)模塊241?;诟櫟闹悄馨l(fā)現(xiàn)模塊241可以對帶跟蹤標(biāo)記的中間文件進行分析并形成重構(gòu)點文件。重構(gòu)點文件是現(xiàn)有技術(shù)中公知的。腳本生成器241基于所述重構(gòu)點文件中所標(biāo)記的操作類型,在可擴展操作集中找到相應(yīng)的模板,并由此生成模式演進腳本和數(shù)據(jù) 移植腳本。
可擴展操作集模塊230與所述模型編輯器210和腳本生成器240 相關(guān)聯(lián)并且用于維護可擴展操作集,其中,可擴展操作集包括一組操 作以及對應(yīng)的數(shù)據(jù)庫演進腳本模板,所述模板包括數(shù)據(jù)庫模式演進腳 本模板和數(shù)據(jù)移植腳本模板。可以在根據(jù)本發(fā)明的基于跟蹤的數(shù)據(jù)庫 演進系統(tǒng)200中預(yù)先定義可擴展操作集。在一個實施例中,數(shù)據(jù)庫管 理員可以修改和擴展所述可擴展操作集,以滿足各種模式演進的需要。
可擴展操作集中的每個操作可以包括操作名稱、操作類型以及與 操作類型對應(yīng)的數(shù)據(jù)庫模式演進腳本模板和數(shù)據(jù)移植腳本模板等。作 為非限制性的例子,在下面示意性地描述了可擴展操作集中的幾種操作。
1.用于移動列的操作 OperationType= Move, Object = Column, Template ={
-模式演進腳本為目標(biāo)表建立一個列
ALTER TABLE SMoveTarget ADD COLUMN $ColumnName SType; -數(shù)據(jù)遷移準(zhǔn)備腳本建立臨時表
CREATE TABLE $MoveSRC—BAK (SoldColu隨List);
-數(shù)據(jù)遷移準(zhǔn)備腳本
INSERT INTO $MoveSRC_BAK (SELECT * FROM $MoveSRC ); Update $MoveTarget set $ColumnName = select $ColumnName from $MoveSRC_BAK;
--模式演進腳本
DROP TABLE $MoveSRC;
CREATE TABLE $MoveSRC (SnewColumnsList);
-數(shù)據(jù)遷移準(zhǔn)備腳本INSERT INTO $MoveSRC (SELECT * FROM $MoveSRCJBAK ); -模式演進腳本刪除臨時表 DROP TABLE $MoveSRC_BAK;
2. 用于更改列名稱的操作 OperationType= AlterName(AlterType), Object = Column,
Template
-數(shù)據(jù)遷移準(zhǔn)備腳本建立臨時表
CREATE TABLE $Table_BAK (SoldColumnsList);
-數(shù)據(jù)遷移準(zhǔn)備腳本
INSERT INTO STable一BAK (SELECT * FROM $ Table);
-模式演進腳本
DROP TABLE $Table;
CREATE TABLE $Table ($newColumnsList(contain new Name)); -數(shù)據(jù)遷移準(zhǔn)備腳本
INSERT INTO $Table (SELECT SnewColumnsList FROM$ Table
_BAK );
-模式演進腳本刪除臨時表 DROP TABLE $Table—BAK;
3. 用于添加新列的操作 OperationType- ADD Column, Object = Column,
Template ={
-模式演進腳本為目標(biāo)建立一個列
ALTER TABLE $Table ADD COLUMN $ColumnName $Type;
14Update $ Table set $MoveTarget = $initialValue5
4.用于刪除表的操作 OperationType= Delete, Object = Table , Template
-模式演進腳本 Drop Table $Target
本領(lǐng)域普通技術(shù)人員應(yīng)當(dāng)理解,上面所描述的操作僅是示例性的, 并且根據(jù)本發(fā)明,可擴展操作集中的操作不限于上面作為示例所描述 的操作。
所述可擴展操作集可以由模型編輯器210使用。例如,當(dāng)利用模 型編輯器210對設(shè)計模型進行編輯時,模型編輯器210參照操作名稱 或操作類型等將對設(shè)計模型的更改記錄到中間文件211中。
所述可擴展操作集還可以由腳本生成器240使用。例如,在完成 對設(shè)計模型的編輯之后,腳本生成器240利用可擴展操作集中的模式 演進腳本模板和/或數(shù)據(jù)移植腳本模板來生成模式演進腳本和/或數(shù)據(jù) 移植腳本。
在一個實施例中,根據(jù)本發(fā)明的系統(tǒng)還可以包括版本管理模塊 250。版本管理模塊250可以將版本信息插入到所生成的新設(shè)計模塊、 模式演進腳本和數(shù)據(jù)移植腳本中。所述版本信息可以用于保持模式演 進腳本、數(shù)據(jù)移植腳本和商業(yè)邏輯代碼之間的一致性。通過該版本信 息,設(shè)計人員和/或開發(fā)人員可以很容易地獲得商業(yè)邏輯代碼的基準(zhǔn)以 及對應(yīng)的模式演進腳本和數(shù)據(jù)移植腳本。
在另 一個實施例中,所述版本管理模塊250可以與版本儲存庫260 相連,其中,所述版本儲存庫260用于存儲設(shè)計模型以及相關(guān)模式演進腳本和數(shù)據(jù)移植腳本的歷史版本。借助于該版本儲存庫260,設(shè)計 人員可以容易地通過版本號找到相應(yīng)的商業(yè)邏輯代碼、數(shù)據(jù)庫模式演 進腳本和數(shù)據(jù)移植腳本。
本發(fā)明的基于跟蹤的數(shù)據(jù)庫模式演進方法包括以下步驟導(dǎo)入原 設(shè)計模型;在編輯原設(shè)計模型時,跟蹤并記錄對原設(shè)計模型的更改; 以及根據(jù)所述對原設(shè)計模型的更改來生成模式演進腳本和數(shù)據(jù)移植腳 本。
圖3示出了根據(jù)本發(fā)明的實施例的基于跟蹤的數(shù)據(jù)庫模式演進方 法300的流程圖。
當(dāng)需求發(fā)生改變時,設(shè)計人員需要對設(shè)計模塊進行更改。根據(jù)本 發(fā)明,設(shè)計人員可以在集成的環(huán)境中對設(shè)計模塊進行更改。
在步驟S301,設(shè)計人員將原設(shè)計模型導(dǎo)入根據(jù)本發(fā)明的基于跟蹤 的數(shù)據(jù)庫模式演進系統(tǒng)200。
在步驟S302,設(shè)計人員利用模型編輯器210對所導(dǎo)入的設(shè)計模型 進行編輯。
在一個實施例中,模型編輯器210可以調(diào)用模型解析器220來對 設(shè)計模型進行解析。模型解析器220輸入設(shè)計模型,并判斷該設(shè)計模 型是否可以被解析。如果該設(shè)計模型不能被解析,則模型解析器進行 報告并退出。否則,模型解析器220對設(shè)計模型進行解析,并輸出用 于描述設(shè)計模型的中間文件以供模型編輯器210使用。
在一個實施例中,可以利用可擴展操作集來跟蹤和記錄對原設(shè)計 模型的更改;以及利用可擴展操作集來生成模式演進腳本和數(shù)據(jù)移植 腳本。例如,設(shè)計人員通過可擴展操作集來對設(shè)計模型進行操作。在 可擴展操作集中定義可以對設(shè)計模型執(zhí)行的操作??蓴U展操作集可以 是預(yù)先定義的。另外,根據(jù)設(shè)計需要,數(shù)據(jù)庫管理員也可以定義其自 己的可擴展操作集。
在對設(shè)計模型進行編輯的同時,跟蹤和記錄對設(shè)計模型的更改。 在一個實施例中,設(shè)計人員從可擴展操作集中選擇操作類型,例如, 用于移動列的操作、用于增加新列的操作、用于更改列名稱的操作或
16用于刪除表的操作等。利用所述操作類型可以對設(shè)計模型進行操作,
并同時在中間文件211中記錄所述操作類型。在本發(fā)明中,由于同時 進行編輯和跟蹤,因此,能夠保證設(shè)計;f莫型與模式演進腳本和數(shù)據(jù)移 植腳本之間的一致性。
在一個實施例中,所述可擴展操作集包括增加操作、刪除操作、 更改名稱操作和移動操作中的至少 一種操作。
在一個實施例中,模型編輯器210利用中間文件來跟蹤和記錄對 設(shè)計模型的更改。
在一個實施例中,由模型解析器220對原設(shè)計模型進行解析來生 成中間文件。
在步驟S303,當(dāng)設(shè)計人員完成對設(shè)計模型的編輯之后,模型編輯 器210輸出新設(shè)計模型以及帶跟蹤標(biāo)記的中間文件。
在步驟S304,根據(jù)帶跟蹤標(biāo)記的中間文件,腳本生成器240可以 同源地生成數(shù)據(jù)庫模式演進腳本和數(shù)據(jù)移植腳本。
在一個實施例中,可以首先采用智能發(fā)現(xiàn)程序(模塊)對帶跟蹤 標(biāo)記的中間文件進行解析,找到其中所標(biāo)記的操作類型。接著,根據(jù) 所述操作類型,在可擴展操作集中檢索相應(yīng)的模式演進腳本模板和數(shù) 據(jù)移植腳本模板。利用所檢索到的模板,可以生成相應(yīng)的模式演進腳 本和數(shù)據(jù)移植腳本。
在步驟S305,輸出生成的新設(shè)計模型、模式演進腳本和數(shù)據(jù)移植 腳本。開發(fā)人員可以利用所述新設(shè)計模型來產(chǎn)生商業(yè)邏輯代碼以及生 成相應(yīng)的商業(yè)邏輯。另外,數(shù)據(jù)庫管理員可以利用模式演進腳本和數(shù) 據(jù)移植腳本來對數(shù)據(jù)庫進行演進。
在一個實施例中,還可以在新設(shè)計模型、模式演進腳本和數(shù)據(jù)移 植腳本中添加版本管理信息,并且將設(shè)計模型、模式演進腳本和數(shù)據(jù)
移植腳本存儲在版本儲存庫中。在需要恢復(fù)先前版本時,該實施例是 非常有用的。
圖4示出了將根據(jù)本發(fā)明的集成的基于跟蹤的數(shù)據(jù)庫模式演進系 統(tǒng)400應(yīng)用于實際數(shù)據(jù)庫演進過程的例子。如圖4所示,當(dāng)需求發(fā)生改變而需要對數(shù)據(jù)庫進行演進時,設(shè)計 人員將原設(shè)計模型導(dǎo)入根據(jù)本發(fā)明的集成的基于跟蹤的數(shù)據(jù)庫模式演 進系統(tǒng)400。接著,設(shè)計人員可以利用根據(jù)本發(fā)明的系統(tǒng)對設(shè)計模型 進行編輯。
當(dāng)設(shè)計人員完成編輯時,根據(jù)本發(fā)明的系統(tǒng)同時生成新設(shè)計模型 以及模式演進腳本和/或數(shù)據(jù)移植腳本。
新設(shè)計模型被提供給開發(fā)人員。開發(fā)人員可以利用基于模型的代 碼生成技術(shù)來實現(xiàn)新的商業(yè)邏輯。
模式演進腳本和/或數(shù)據(jù)移植腳本被提供給數(shù)據(jù)庫管理員,以便對 數(shù)據(jù)進行演進。數(shù)據(jù)庫管理員還可以根據(jù)需要對可擴展操作集進行修 改。
可以通過各種方式來實現(xiàn)本發(fā)明的方法及系統(tǒng)。例如,可以通過 軟件、硬件、固件以及其任意組合來實現(xiàn)本發(fā)明的方法及系統(tǒng)。上面 描述方法步驟的順序僅是為了說明性的目的而采用的,除非明確的說 明,否則,本發(fā)明的方法的步驟不限于上面具體描述的順序。另外, 在某些實施例中,本發(fā)明還可以體現(xiàn)為在記錄介質(zhì)上所記錄的程序, 其包括用于實現(xiàn)根據(jù)本發(fā)明的方法的機器可讀指令。
盡管上面已經(jīng)通過例子對本發(fā)明的特定實施例進行了詳細(xì)描述, 但是,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,上述例子僅是說明性的而并 非是對本發(fā)明的限制。本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)明白,在不脫離本 發(fā)明的精神和范圍的情況下,可以對上述實施例做出修改。本發(fā)明的 范圍由所附的權(quán)利要求來限定。
權(quán)利要求
1. 一種集成的基于跟蹤的數(shù)據(jù)庫模式演進方法,包括以下步驟導(dǎo)入原設(shè)計模型(S301);在編輯原設(shè)計模型時,跟蹤并記錄對原設(shè)計模型的更改(S302);以及根據(jù)所述對原設(shè)計模型的更改來生成模式演進腳本和數(shù)據(jù)移植腳本(S304)。
2. 根據(jù)權(quán)利要求1所述的方法,還包括利用可擴展操作集來跟蹤和記錄對原設(shè)計模型的更改;以及利用可擴展操作集來生成模式演進腳本和數(shù)據(jù)移植腳本。
3. 根據(jù)權(quán)利要求2所述的方法,其中,所述可擴展操作集包括增加操作、刪除操作、更改名稱操作和移動操作中的至少一種操作。
4. 根據(jù)權(quán)利要求1所述的方法,還包括利用中間文件來跟蹤和記錄對設(shè)計模型的更改。
5. 根據(jù)權(quán)利要求4所述的方法,還包括對原設(shè)計模型進行解析以生成中間文件。
6. 根據(jù)權(quán)利要求4或5所述的方法,其中,基于中間文件來同源地生成模式演進腳本和數(shù)據(jù)移植腳本。
7. —種集成的基于跟蹤的數(shù)據(jù)庫模式演進系統(tǒng)(200),包括模式編輯器(210),用于編輯原設(shè)計模型并同時跟蹤和記錄對原設(shè)計模型的更改;以及腳本生成器(240),用于根據(jù)所述對原設(shè)計模型的更改來生成模式演進腳本和數(shù)據(jù)移植腳本。
8. 根據(jù)權(quán)利要求7所述的系統(tǒng),還包括與模式編輯器(210)和腳本生成器(240)耦合的可擴展操作集模塊(230),可擴展操作集模塊(230)用于維護可擴展操作集,其中,可擴展操作集包含能對設(shè)計模型執(zhí)行的操作類型以及相應(yīng)的模式演進腳本模板和數(shù)據(jù)移植腳本模板。2
9. 根據(jù)權(quán)利要求8所述的系統(tǒng),其中,所述可擴展操作集包括增加操作、刪除操作、更改名稱操作和移動操作中的至少一種操作。
10. 根據(jù)權(quán)利要求7所述的系統(tǒng),其中,所述模型編輯器(210)包含中間文件(211),其中所述中間文件用于跟蹤和記錄對設(shè)計模型的更改。
11. 根據(jù)權(quán)利要求10所述的系統(tǒng),還包括與模型編輯器(210)耦合的模型解析器(220 ),用于對原設(shè)計模型進行解析以生成中間文件。
12. 根據(jù)權(quán)利要求10或11所述的方法,其中,所述腳本生成器(240 )基于中間文件來同源地生成模式演進腳本和數(shù)據(jù)移植腳本。
全文摘要
本發(fā)明公開了一種集成的基于跟蹤的數(shù)據(jù)庫模式演進方法和系統(tǒng)。所述方法包括以下步驟導(dǎo)入原設(shè)計模型;在編輯原設(shè)計模型時,跟蹤和記錄對原設(shè)計模型的更改;以及生成新設(shè)計模型,并根據(jù)所述對原設(shè)計模型的更改來生成模式演進腳本和數(shù)據(jù)移植腳本。
文檔編號G06F17/30GK101499063SQ200810004968
公開日2009年8月5日 申請日期2008年1月31日 優(yōu)先權(quán)日2008年1月31日
發(fā)明者沛 孫, 張劍鳴, 寧 段 申請人:國際商業(yè)機器公司