張 博,李亞芬,王 普
(北京工業大學電子信息與控制工程學院,北京100124)
模型驅動架構 (model driven architecture,MDA)[1]是由對象管理組織 (object management group,OMG)提出的一個軟件開發過程和方法,它定義了平臺無關模型 (platform independent model,PIM)和平臺相關模型 (platform specific model,簡稱PSM),其核心思想是以模型作為整個軟件開發過程的中心,根據不同的開發階段,使用不同抽象層次的模型對系統進行分析、提煉和獲取相關的信息,如圖1所示。
MDA的思想是將系統中的元素都看作一個模型或者一個模型元素,并且它們可以依照相關規范進行組合,在更高的層次上實現軟件的復用。這種開發模式的優勢主要體現在,模型貫穿于整個軟件開發過程中,需求變更首先會體現在模型的變化上,而代碼也是由模型自動生成的,所以這種開發模式不但可以提高軟件開發效率,還可以將模型作為后期維護與系統再開發的可靠依據。可見MDA在一定程度上解決了傳統軟件開發所面臨的種種問題,旨在降低系統中業務與技術的耦合,提高了系統的可移植性和可維護性。

圖1 MDA設計模式
在設計一個Web系統時,數據庫的建設是一個重要部分。傳統的數據庫的設計方法是直接建立ER模型 (entityrelation模型,ER模型)來描述系統,如采用PowerDesigner等工具。由此方法可以靈活地創建健壯的數據模型,但是它沒有采用面向對象的技術對系統進行描述,忽略了軟件系統的業務因素和需求對數據的影響,直接根據需求分析得到數據庫模型,由于跨度比較大,容易造成設計的數據庫與客戶所需要的模型有較大的出入[2]。而面向對象的建模方法可以從需求分析的角度出發,循序漸進地構造模型,即從需求分析得到UML模型,再經過轉換得到數據庫模型,這種建模方法不易產生設計人員與客戶之間對數據庫理解的差異。
本文針對以上問題,提出一種基于元模型的UML模型到數據庫模型的轉換方法。采用MDA思想,在建立系統面向對象的UML模型的同時,將模型中的關聯關系、約束等信息提取出來進行抽象描述,再通過ATL自動地轉換成數據庫模型。
模型是MDA的核心。在UML中,可以使用類、屬性、關聯、狀態等元素描述一個完整的軟件系統。模型是系統的抽象,它比實現系統更容易獲取、理解和計算,確定一個將要在PIM到PSM的轉換中使用到的元模型是一個艱巨的任務。不同層面的模型間的相互關系是符合元模型機構(meta object facility,MOF)標準的。MOF元對象設施是OMG組織提出的一個標準,它是自描述的,所有的建模語言 (如UML等)都是MOF的實例。
模型不僅僅是帶標記的導向圖,還包括一些基于元模型的精確描述和附加屬性。從元模型的觀點來看,PIM和PSM都沒有一個唯一的元模型,模型轉換就是將一種元模型中所定義的元類轉換到另一種元模型定義的元類上。
本文以Web信息管理系統為例來說明UML模型到關系數據庫模型的轉換。在MDA框架下模型轉換系統首先建立用UML類圖描述的PIM,由UML的基本元素:類、屬性、屬性類型、關聯關系、繼承關系等構成。之后細化PIM模型的操作,再轉化為關系數據庫類型的PSM模型。具體的轉換規則就是將上述的映射規則定義成可操作的代碼,通過轉換引擎調用這些規則進行模型的轉換。最后將PSM模型輸入到代碼生成器中,用戶就可以得到所需要的數據庫操作代碼,具體流程如圖2所示。

圖2 模型轉換系統流程
當前MDA正處于發展階段,模型轉換方法有很多種。例如:手動轉換方法 (人為地對源模型中的元素進行轉換,得到目標模型)、基于規則的模型轉換[3]、基于模板的代碼生成技術 (例如AndroMDA)、基于關系代數的模型轉換(將模型轉換表達為一個二元關系或者一組二元關系)[4]、基于元模型映射的模型轉換 (進行M1層模型轉換時,以M2層的模型元素的映射作為轉換規則來執行轉換)[5]、基于模式的模型轉換[6]、以及基于模型編織技術[7]等。
本文在研究基于MDA的UML模型到數據庫模型的轉換中,使用的轉換是以元模型為基礎的,采用Atlas轉換語言進行轉換。
Atlas屬于開源的項目,其轉換框架如圖3所示。

圖3 Atlas轉換框架
圖3 中的每個元素在MDA中都起著重要的作用。MOF是建立元模型的過程中行之有效的元元模型。PIM反映了系統的功能、結構和行為。PSM則更加注重實現,是對應于給定平臺的PIM的一個模型描述。源模型和目標模型是符合這些元模型的模型實例。模型轉換是通過一個轉換引擎執行轉換規則來完成的,轉換規則制定如何從源模型生成目標模型[8]。一個完整的Atlas模型轉換程序需要4個文件:源元模型a、目標元模型b、源模型、模型轉換實例。通過轉換生成的模型就是我們得到的目標模型。
通過上面的論述,只有在定義了完整的源元模型、目標元模型、模型轉換規則和源模型的基礎上,才能得到目標模型。因此,下面將逐一對上述模型進行分析與設計,并通過實例進行描述。
依據元模型自描述的特征,本文用UML類圖來描述UML元模型。模型包括類、數據類型、屬性、操作、關聯等基本元素[9]。模型中的Class類和DataType類均繼承自抽象類Classifier,其中最主要的類是Class類,它包括一組Attribute類型的屬性,一組Operation類型的操作以及類之間的關聯關系集合。類DataType為原始的建模數據類型,如圖4所示。

圖4 UML元模型
上述UML元模型是對系統的抽象描述,提取了系統中的類和關系。本文將針對北京市重點學科系統進行分析,依照UML元模型,建立其具體的模型描述。該系統中主要包含如部門Depart、部門主管Authority、學科Category、學科主管Director、一級學科One_dpl、二級學科Two_dpl等多個對象,每個對象擁有自己的屬性,對象之間存在一對多,多對多等關聯關系,例如一個部門有一到多個主管,多個部門可以對應多個學科、一級學科包含多個二級學科等等,這種關聯關系用直線描述,在直線兩端的數字表示數量關系。同時,在UML模型的Operation中加入CHECK操作對對象的屬性進行約束,這樣可以限制其取值范圍或格式。源模型的UML模型如圖5所示。
如圖6所示,本文研究的目標是自動生成數據庫模型,因此目標元模型的設計就是數據庫元模型。關系數據庫元模型也是由UML模型中的類進行描述的。在這個模型中的5個主要類別:表,列,鍵,外鍵和SQL數據類型。它們對應到數據庫中的相應元素。主要的類是Table類,代表數據庫的表,它包括一組列Column和對鍵Key的引用,Column通過鍵Key定義數據庫的外鍵關系。列Column具有對數據類型SQLDataType的引用,表示列中數據所使用的數據類型。
2.4.1 總體設計
在設計了上述兩個元模型的基礎上,定義這兩個模型之間的映射關系,即UML到數據庫模型的映射。圖7顯示了從UML元模型到數據庫元模型的完整映射。映射通過一組規則,指定源元模型 (即UML元模型)中的各個元素映射到目標元模型 (即數據庫元模型)中各個元素[10]。在圖中,兩個元模型的映射使用圖形符號“○”來表示,UML元模型在左側,映射在中間,數據庫元模型在右側。此圖形符號包含以下內容:連接 (源和目標),關聯關系,轉換規則和組成。一個連接表示一個或多個元模型元素之間的轉換規則。轉換規則將元模型通過轉換,得到適當的目標元模型中的元素。最后,使用Atlas模型轉換語言來對上述的轉換規則進行編寫,便得到轉換規則的代碼描述,.atl為文件后綴。如圖7所示。

圖5 系統源模型
2.4.2 轉換規則設計
基于對應用程序或數據庫的需求,模型會不斷的變化,因此很有必要在UML模型和數據庫模型之間建立映射規則,確保當發生需求變更時,僅需要對源模型進行修改,即可自動體現在目標模型上。
本文將規則設計為兩部分:直接映射規則和間接映射規則。直接映射規則代表的是轉換過程中無需進行操作,直接生成對應的模型元素,主要包括4個方面。
(1)主鍵 (FK):對象標識符映射為數據庫主鍵,
所有的外鍵都設計為對主鍵的引用。
(2)數據類型 (DataType):UML元模型中的
DataType代表了在類圖中所定義的屬性的數據類型,它映射到數據庫元模型中,就轉換成數據庫中的數據類型,即SQLDataType。
(3)列 (Column):UML模型中的屬性映射為數據
庫中的列,屬性的數據類型即數據庫中的SQLData-Type。
(4)約束:UML模型中的Operation操作中定義的
對屬性的約束,將會映射為數據庫中列的約束,CHECK在數據庫中可以約束該列設定值的取值范圍及格式。
間接映射規則代表的是無法由UML模型直接生成目標模型元素。需要在對映射元素進行判斷后執行規則,間接映射主要涉及到兩個主要方面:類的映射和關聯關系的映射。
(1)類的映射:將類映射為關系數據庫中的表時,需要對類之間的繼承關系進行分析處理。繼承關系的處理方法取決于在數據庫中怎樣組織類中被繼承的屬性。首先,將所有的類都映射為數據庫中的表。這種方法為每個超類和子類都創建一張表,這些表共享一個公共的主鍵。如果存在繼承關系,則將超類的屬性下移,每個子類對應的數據庫表中既包含該子類中的屬性,也包含該子類所繼承的屬性。超類不映射為數據庫表,這樣就減少了數據庫表的數量,訪問速度有所提升。

(2)關聯關系的映射:數據庫模型中的關系是通過Key來描述的。Foreign Key是在一張表中出現的一個或多個數據屬性,它是另一張Table的Key的一部分,或者是另一張Table的Key。Foreign Key讓一張表中的一行與另一張表中的一行相關起來。如果要實現一對一或者一對多的關系,只需要將一張Table包含另一張Table的Key。
在模型轉換的過程中,我們在源模型中定義了一個參數MultiValue,如果MultiValue=ture,那么表示該表和其他表具有一對多或者多對多的關系,如果沒有此參數,則表示該表和其他表僅是一對一的關系,在轉換規則中將分別對這些轉換進行定義[11]。
下面以學科管理Web應用系統中的單位機構和學科門類為例來說明關聯關系的映射:
多對多關聯的映射:鑒于數據庫的3個范式,多對多關聯的實現并不能用兩張表來進行實現,因此需要建立一張關聯表。關聯表是一張獨立的表,它用于在關系數據庫中維護兩張或多張表之間的關聯。在關系數據庫中,關聯表中包含的屬性是關系中涉及到的表中的鍵的組合。關聯表的名字是它所關聯的表的名字的組合,或者是它實現的關聯的名字。圖8說明了如何在關系數據庫中實現多對多的關聯關系。

圖8 多對多關聯的映射
一對多關聯的映射映射:如圖9所示,在實現一對多關聯時,設置MultiValue=ture,將外鍵Foreign Key放置在“多”的一方,角色作為外鍵屬性名的一部分。外鍵的空與非空由對1的強制性決定。

圖9 一對多關聯的映射
針對圖7列出的映射關系對照圖,采用Atlas轉換語言對其一一進行描述,得到轉換規則代碼。由于篇幅所限,這里給出模型轉換的代碼片段:
module UML2Database;
create OUT:Database from IN:UML;
rule Class2Table;
rule DataTypeAttribute2Column{
from
a:UML!Attribute(
a.type.oclIsKindOf (UML! DataType ) and not a.multiValued
)
to
out:Database!Column(
name< - a.name,
type<-a.type
)}…
…
rule Attribute2Column{
from
a:Class!Attribute(
a.type.oclIsKindOf(Class!Class)and not a.multi Valued
)
to
out:Relational!Column(
name < - a.name+ 'Id',
type<-thisModule.objectIdType
)}
通過執行轉換規則,源模型按照相關映射關系,得到了目標模型,即數據庫模型,它是XMI格式描述的,用UML圖形化表示后,如圖10所示。
由UML設計的源模型經過ATL轉換,得到了數據庫目標模型。它們分別用數據庫的表,列,主鍵,外鍵來描述整個系統,是一個完整的數據庫系統。對于源模型中的多重關系,生成了新的關聯關系表,用名稱_名稱表示,里面包含關聯的基本信息。由生成的目標模型可以看出,UML類圖中的每個元素均按照對應的轉換規則進行轉換。源模型中存在5個關聯,因此生成了5個關聯關系表。
U M L對象模型在本質上只是一個擴展的實體-關系(ER)模型,它強調的是面向對象的觀點,同時,ER模型現在已被普遍接受,所以在面向對象的設計中,U M L使得軟件和數據庫使用相同的模型一起工作,保證了系統的一致性設計。本文探討了在MDA中使用建立數據庫模型的方法,分析了在元模型的基礎上UML模型與關系數據庫模型之間的映射關系,并使用Atlas轉換語言對其進行代碼級的描述。在下一步工作中,應考慮更多模型的復雜性,不斷完善模型間的映射關系,進一步提高模型轉換的精度和完整性,針對更多業務領域編寫相關的模型及模型轉換實例。

圖10 目標數據庫模型
[1]Joaquin Miller,Jishnu Mukerji.MDA guide version 1.0.1 [EB/OL ].http://www.omg.org/cgi-bin/doc? omg/03-06-01,2003.
[2]XIONG Xinfu.Research of relational database modeling based on UML[D].Chengdu:University of Electronic Science and Technology of China,2011(in Chinese).[熊信富.基于UML的關系數據庫建模研究與實現[D].成都:電子科技大學.2011.]
[3]ZHANG Zheng,HE Keqing.A rule-based model transformation method [J].Application Research of Computers,2005,22(10):16-19(in Chinese).[張征,何克清.一種基于規則的模型轉換方法 [J].計算機應用研究,2005,22(10):16-19.]
[4]JIANG Lu.MDA-based transformation between UML models[D].Xi’an:Xidian University,2009:1-23(in Chinese).[蔣璐.基于MDA的UML模型轉換[D].西安:西安電子科技大學,2009:1-23.]
[5]Tihomir Calic.Exploration of model driven architecturecapabi-lities via comparative utilization of MDA tools[D].Reno:University of Nevada,2006.
[6]ZHAO Ping.Research of the model transformation technology in MDA [D].Harbin:Harbin Engineering University,2010:3-17(in Chinese).[趙萍.模型驅動系統中模型轉換技術的研究[D].哈爾濱:哈爾濱工程大學,2010:3-17.]
[7]Fabro MDD,Jouault F.Model transformation and weaving in the AMMA platform [C]//Proc of the Generative and Trans.Techniques in Software Engineering,2005:71-77.
[8]Jos'e Barranquero Tolosa,Oscar Sanju'an-Mart'lnez.Towards the systematic measurement of ATL transformation mo-dels[J].Software– Practice and Experience,2011,41(7):789-815.
[9]France R B.Model-driven development using UML 2.0:promises and pitfalls[J].Computer,2006,39(2):59-66.
[10]Jesus M Alemndros,Luis Iribarne.UML modeling of user and database interaction [J].The Computer Journal,2009,52(3):348-367.
[11]Pontus Bostr,Mats Neovius,Ian Oliver,et al.Formal transformation of platform independent models into platform specific models[C]//Abo Akademi University,Department of Information Technologies Turku Centre for Computer Science,2007.