專利名稱:自動建立關(guān)系模型的系統(tǒng)及其方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)庫技術(shù)領(lǐng)域,特別是一種自動建立關(guān)系模型的系統(tǒng)及其方法。
背景技術(shù):
當前,在應(yīng)用中通常將JAVA2企業(yè)版(J2EE)系統(tǒng)的體系結(jié)構(gòu)分為三個基本層次展示層、業(yè)務(wù)邏輯層和數(shù)據(jù)源層,其中展示層用于向最終用戶提供界面,業(yè)務(wù)邏輯層用于進行各個領(lǐng)域中的業(yè)務(wù)邏輯處理,數(shù)據(jù)源層用于處理和關(guān)系數(shù)據(jù)庫、消息系統(tǒng)的連接,并完成事務(wù)管理等功能。在上述三個基本層次中,數(shù)據(jù)源層是非常重要的層次,在實際應(yīng)用中數(shù)據(jù)源的大多數(shù)應(yīng)用場景是關(guān)系數(shù)據(jù)庫。
在J2EE的體系架構(gòu)中,可以通過JAVA數(shù)據(jù)庫連接技術(shù)(JDBC)直接對關(guān)系數(shù)據(jù)庫進行訪問,這也是大多數(shù)應(yīng)用所采用的數(shù)據(jù)訪問方式,但是在應(yīng)用程序中使用JDBC訪問數(shù)據(jù)庫將會導(dǎo)致業(yè)務(wù)處理邏輯和數(shù)據(jù)訪問代碼混雜在一起,不利于后期的維護。而對象/關(guān)系映射技術(shù)是一種很好的替代方案,在關(guān)系數(shù)據(jù)庫訪問接口上使用對象/關(guān)系映射技術(shù)可以通過面向?qū)ο?OO)模型屏蔽后臺數(shù)據(jù)庫系統(tǒng)的差異,并且系統(tǒng)的數(shù)據(jù)模型易于理解,有利于提高編程的效率,還可以提高代碼的可讀性和可維護性。
目前比較成熟的對象/關(guān)系映射解決方案有三類,以下分別說明。
第一類為基于對象模型的建模方案?;趯ο竽P偷慕7桨竿耆詫ο竽P蜑橹行模饕且越y(tǒng)一模型化語言(UML)為代表的圖形化建模工具。但是,該類方案沒有針對數(shù)據(jù)訪問層的應(yīng)用場景做裁減,所以使用比較復(fù)雜;并且該類方案沒有提供對象模型到關(guān)系模型的映射工具,關(guān)系模型的維護需要通過另外的工具實現(xiàn),集成度較低;而且該方案沒有針對對象/關(guān)系映射技術(shù)的集成,手工集成的工作量較大。
第二類為基于關(guān)系模型的建模方案。基于關(guān)系模型的解決方案完全以關(guān)系模型為中心,主要是以實體關(guān)系(ER)圖為代表的圖形化建模工具。但是這類方案沒有提供對象模型到關(guān)系模型的映射工具,對象模型的維護需要通過另外的工具實現(xiàn),集成度較低;而且沒有針對對象/關(guān)系映射技術(shù)的集成,手工集成的工作量較大。
第三類為基于配置文件的對象關(guān)系映射方案。這種方案以Hibernate技術(shù)為代表。使用這種映射方案,用戶需要提供大量的配置文件,用戶需要理解類之間的關(guān)聯(lián)、繼承、組合等關(guān)系,并把這些類和關(guān)系的映射規(guī)則手工編寫成為對應(yīng)的配置文件和映射文件。這種技術(shù)方案的缺點是其沒有提供自動化的開發(fā)工具,完全依賴于用戶的手工勞動;難于維護,配置文件、映射規(guī)則、數(shù)據(jù)庫建表腳本都需要手工編寫,任何一個地方修改都會牽涉其他地方的修改,修改過程中容易導(dǎo)致錯誤。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明提出了一種建立關(guān)系模型的方法,用以提高系統(tǒng)集成度,降低手工集成工作量,從而提高開發(fā)效率。本發(fā)明的另一個目的是提供一種建立關(guān)系模型的系統(tǒng)。
為實現(xiàn)上述目的,本發(fā)明提供了一種自動建立關(guān)系模型的IDE系統(tǒng),該系統(tǒng)包括模型信息采集引擎,用于從對象模型采集得到模型關(guān)聯(lián)信息,并將所述模型關(guān)聯(lián)信息發(fā)送給自動轉(zhuǎn)換引擎;自動轉(zhuǎn)換引擎,用于根據(jù)預(yù)設(shè)的映射規(guī)則定義文件、所述模型關(guān)聯(lián)信息和對象模型,生成關(guān)系模型。
所述自動轉(zhuǎn)換引擎進一步用于生成映射文件。
所述自動轉(zhuǎn)換引擎包括第一自動轉(zhuǎn)換引擎,用于根據(jù)預(yù)設(shè)的映射規(guī)則定義文件、所述模型關(guān)聯(lián)信息和對象模型,生成映射文件;模型輸出工具,用于根據(jù)所述映射文件生成關(guān)系模型。
本發(fā)明還提供了一種自動建立關(guān)系模型的方法,該方法包括以下步驟設(shè)置對象模型到關(guān)系模型的映射規(guī)則,以及從對象模型中采集模型關(guān)聯(lián)信息;根據(jù)所述映射規(guī)則和模型關(guān)聯(lián)信息以及對象模型,自動生成關(guān)系模型。
所述從對象模型中采集模型關(guān)聯(lián)信息的步驟為遍歷對象模型,并獲取模型關(guān)聯(lián)信息。
所述根據(jù)映射規(guī)則和模型關(guān)聯(lián)信息以及對象模型自動生成關(guān)系模型的步驟包括根據(jù)所述映射規(guī)則和模型關(guān)聯(lián)信息以及對象模型生成映射文件;根據(jù)映射文件生成關(guān)系模型。
所述根據(jù)映射規(guī)則和模型關(guān)聯(lián)信息以及對象模型自動生成關(guān)系模型的步驟進一步包括生成映射文件的步驟。
所述映射文件包括Hibernate映射文件和Hibernate配置文件。
所述模型關(guān)聯(lián)信息包括單鍵實體類;所述映射規(guī)則包括類映射到表;主鍵屬性映射為表的主鍵;非主鍵屬性映射為表的字段。或者所述模型關(guān)聯(lián)信息包括復(fù)合主鍵實體類;所述映射規(guī)則包括類映射到表;主鍵屬性映射為表的主鍵,主鍵類所有的屬性映射到表的復(fù)合主鍵字段;非主鍵屬性映射為表的字段。
所述模型關(guān)聯(lián)信息包括實體類型和值類型,且所述實體類與值類型為一對一關(guān)系;所述映射規(guī)則為實體類映射到表;實體主鍵屬性映射為表的主鍵;值類型的多個屬性映射到實體類對應(yīng)的表的多個字段;非主鍵屬性映射為表的字段;或者所述映射規(guī)則為實體類和值類型分別映射到兩張獨立的表;值類型對應(yīng)的表中增加實體類的主鍵字段,作為值類型的主鍵和外鍵。
所述模型關(guān)聯(lián)信息包括實體類型和值類型,且所述實體類與值類型為一對多關(guān)系;所述映射規(guī)則為實體類和值類型分別映射到兩張獨立的表;值類型對應(yīng)的表中增加實體類的主鍵字段,作為值類型的外鍵,且值類型有單獨的主鍵字段。
所述模型關(guān)聯(lián)信息包括屬性類型;所述屬性類型為基本類型或基于擴展的基本類型時,所述映射規(guī)則包括屬性類型映射到數(shù)據(jù)庫的字段;和/或所述屬性類型為結(jié)構(gòu)類型時,所述映射規(guī)則包括結(jié)構(gòu)類型與其所述的類映射到同一張表。
所述模型關(guān)聯(lián)信息包括關(guān)聯(lián)類與被關(guān)聯(lián)類單向一對一關(guān)聯(lián)關(guān)系和/或關(guān)聯(lián)類和被關(guān)聯(lián)類雙向一對多關(guān)聯(lián)關(guān)系。所述映射規(guī)則為關(guān)聯(lián)類映射到表;關(guān)聯(lián)類和被關(guān)聯(lián)類的屬性映射到表的字段?;蛘咚鲇成湟?guī)則為關(guān)聯(lián)類和被關(guān)聯(lián)類分別映射到兩張表;被關(guān)聯(lián)類對應(yīng)的表使用關(guān)聯(lián)類的主鍵作為自己的主鍵和外鍵字段。或者所述映射規(guī)則為關(guān)聯(lián)類和被關(guān)聯(lián)類分別映射到兩張表;被關(guān)聯(lián)類對應(yīng)的表使用關(guān)聯(lián)類的主鍵作為自己的外鍵字段,并使用單獨的主鍵字段。
所述模型關(guān)聯(lián)信息包括關(guān)聯(lián)類和被關(guān)聯(lián)類單向一對多關(guān)聯(lián)關(guān)系,和/或關(guān)聯(lián)類和被關(guān)聯(lián)類雙向一對多關(guān)聯(lián)關(guān)系,和/或關(guān)聯(lián)類和被關(guān)聯(lián)類雙向多對一關(guān)聯(lián)關(guān)系。所述映射規(guī)則為關(guān)聯(lián)類和被關(guān)聯(lián)類分別映射到兩張表;被關(guān)聯(lián)類對應(yīng)的表使用關(guān)聯(lián)類的主鍵作為自己的外鍵字段?;蛘咚鲇成湟?guī)則為關(guān)聯(lián)類和被關(guān)聯(lián)類分別映射到兩張表;創(chuàng)建一個新的連接表,表中的字段包含關(guān)聯(lián)類和被關(guān)聯(lián)類的主鍵字段?;蛘咚鲇成湟?guī)則為關(guān)聯(lián)類和被關(guān)聯(lián)類分別映射到兩張表;創(chuàng)建一個新的連接表,表中的字段包含關(guān)聯(lián)類和被關(guān)聯(lián)類的主鍵字段,同時關(guān)聯(lián)表有自己的主鍵字段。
所述模型關(guān)聯(lián)信息包括關(guān)聯(lián)類和被關(guān)聯(lián)類單向多對一關(guān)聯(lián)關(guān)系。所述映射規(guī)則為關(guān)聯(lián)類和被關(guān)聯(lián)類分別映射到兩張表;關(guān)聯(lián)類使用被關(guān)聯(lián)類的主鍵屬性作為外鍵字段?;蛘咚鲇成湟?guī)則為關(guān)聯(lián)類和被關(guān)聯(lián)類分別映射到兩張表;創(chuàng)建一個新的連接表,表中的字段包含關(guān)聯(lián)類和被關(guān)聯(lián)類的主鍵字段。或者所述映射規(guī)則為關(guān)聯(lián)類和被關(guān)聯(lián)類分別映射到兩張表;創(chuàng)建一個新的連接表,表中的字段包含關(guān)聯(lián)類和被關(guān)聯(lián)類的主鍵字段,連接表同時有自己的主鍵字段。
所述模型關(guān)聯(lián)信息包括關(guān)聯(lián)類和被關(guān)聯(lián)類多對多關(guān)聯(lián)關(guān)系和/或關(guān)聯(lián)類和被關(guān)聯(lián)類雙向多對多關(guān)聯(lián)關(guān)系。所述映射規(guī)則為關(guān)聯(lián)類和被關(guān)聯(lián)類分別映射到兩張表,屬性對象映射到一張連接表;創(chuàng)建一個新的連接表,該新連接表中的字段只包含關(guān)聯(lián)類和被關(guān)聯(lián)類的主鍵字段,并且新連接表的某個字段和前面的主鍵字段聯(lián)合起來作為主鍵。
所述模型關(guān)聯(lián)信息包括父類與子類的繼承關(guān)系。所述映射規(guī)則為每個層次的類的所有屬性疊加到一張表中;父類使用類型字段表示自己所在的層次;所有的子類層次對應(yīng)的表共用父類的主鍵作為外鍵唯一標識一條記錄?;蛘咚鲇成湟?guī)則為每個子類生成一張單獨的表;每個子類對應(yīng)的表使用父類的主鍵作為外鍵唯一標識一條記錄?;蛘咚鲇成湟?guī)則為每個具體類一張表,該表中包含了從最頂層的父類到該子類的所有字段的并集。
所述模型關(guān)聯(lián)信息包括關(guān)聯(lián)屬性類和被關(guān)聯(lián)屬性類一對一組合關(guān)系。所述映射規(guī)則為關(guān)聯(lián)屬性類映射到表;關(guān)聯(lián)屬性類主鍵屬性映射為表的主鍵;被關(guān)聯(lián)屬性類的多個屬性映射到關(guān)聯(lián)類對應(yīng)的表的多個字段;非主鍵屬性映射為表的字段?;蛘咚鲇成湟?guī)則為關(guān)聯(lián)屬性類和被關(guān)聯(lián)屬性類分別映射到兩張獨立的表中;被關(guān)聯(lián)屬性類對應(yīng)的表中增加關(guān)聯(lián)屬性類的主鍵字段,作為被關(guān)聯(lián)屬性類的主鍵和外鍵。
所述模型關(guān)聯(lián)信息包括關(guān)聯(lián)屬性類和被關(guān)聯(lián)屬性類一對多組合關(guān)系。所述映射規(guī)則為關(guān)聯(lián)屬性類和被關(guān)聯(lián)屬性類分別映射到兩張獨立的表中;被關(guān)聯(lián)屬性類對應(yīng)的表中增加關(guān)聯(lián)屬性類的主鍵字段,作為被關(guān)聯(lián)屬性類的外鍵,且被關(guān)聯(lián)屬性類有單獨的主鍵字段。
從上述方案中可以看出,由于本發(fā)明從對象模型采集模型關(guān)聯(lián)信息并設(shè)置映射規(guī)則,根據(jù)模型關(guān)聯(lián)信息和映射規(guī)則以及對象模型自動生成關(guān)系模型以及自動生成映射文件,提高了對象模型到關(guān)系模型映射的自動化程度,提高了系統(tǒng)集成度,降低了手工集成工作量,簡化了開發(fā)人員的工作,從而提高了開發(fā)效率,并且能降低由于開發(fā)人員手工定義導(dǎo)致的錯誤比率。另外,實施本發(fā)明時,只需要簡單的映射規(guī)則設(shè)置,甚至不用設(shè)置而采用缺省的規(guī)則,就可以完成關(guān)系模型的自動生成、Hibernate映射文件的自動生成,大大提高的工作的效率。
圖1為本發(fā)明實施例的一種系統(tǒng)結(jié)構(gòu)圖。
圖2為本發(fā)明實施例的另一種系統(tǒng)結(jié)構(gòu)圖。
圖3為本發(fā)明實施例中所采用的對象模型的示意圖。
圖4a和圖4b分別為單鍵實體類以及對應(yīng)的關(guān)系模型的示意圖。
圖5a和圖5b為復(fù)合主鍵實體類的示意圖,圖5c為對應(yīng)的關(guān)系模型。
圖6a為一對一的實體類和值類型的示意圖,圖6b和圖6c為與圖6a對應(yīng)的關(guān)系模型;圖6d為一對多的實體類和值類型的關(guān)系模型示意圖。
圖7a為單向一對一關(guān)聯(lián)關(guān)系的示意圖,圖7b為與圖7a對應(yīng)的基于主鍵的關(guān)系模型示意圖。
圖8a為單向一對多關(guān)聯(lián)關(guān)系的示意圖,圖8b、圖8c和圖8d分別為與圖8a對應(yīng)的關(guān)系模型示意圖。
圖9a為單向多對一關(guān)聯(lián)關(guān)系的示意圖,圖9b、圖9c和圖9d分別為與圖9a對應(yīng)的關(guān)系模型示意圖。
圖10a為單向多對多關(guān)聯(lián)關(guān)系的示意圖,圖10b為與圖10a對應(yīng)的關(guān)系模型示意圖。
圖11a為繼承關(guān)系的示意圖,圖11b、圖11c和圖11d分別為與圖11a對應(yīng)的關(guān)系模型示意圖。
具體實施例方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,以下舉實施例對本發(fā)明進一步詳細說明。
圖1所示的是本發(fā)明實施例中的一種自動建立關(guān)系模型的集成開發(fā)環(huán)境(IDE)系統(tǒng)的示意圖,該系統(tǒng)主要包括模型信息采集引擎和自動轉(zhuǎn)換引擎。其中模型信息采集引擎從對象模型采集得到模型關(guān)聯(lián)信息,然后將模型關(guān)聯(lián)信息發(fā)送給自動轉(zhuǎn)換引擎;自動轉(zhuǎn)換引擎根據(jù)預(yù)先設(shè)置的映射規(guī)則定義文件、所述模型關(guān)聯(lián)信息以及對象模型,生成映射文件和關(guān)系模型,用戶可以利用得到的關(guān)系模型來訪問數(shù)據(jù)庫。其中模型信息采集引擎的采集過程可以為遍歷對象模型并獲取模型關(guān)聯(lián)信息。所述模型關(guān)聯(lián)信息包括關(guān)聯(lián)關(guān)系、繼承關(guān)系、組合關(guān)系、類名稱及其屬性列表、屬性名稱及其類型等;所述映射規(guī)則定義文件包括類映射規(guī)則、屬性映射規(guī)則、關(guān)聯(lián)映射規(guī)則、繼承映射規(guī)則、組合映射規(guī)則等。映射文件可以包括Hibernate映射文件和Hibernate配置文件。
圖2所示的是本發(fā)明實施例的另一種系統(tǒng)結(jié)構(gòu),該系統(tǒng)包括模型信息采集引擎和自動轉(zhuǎn)換引擎,自動轉(zhuǎn)換引擎包括第一自動引擎轉(zhuǎn)換以及模型輸出工具,其中模型信息采集引擎從對象模型采集得到模型關(guān)聯(lián)信息,然后將模型關(guān)聯(lián)信息發(fā)送給自動轉(zhuǎn)換引擎,自動轉(zhuǎn)換引擎根據(jù)預(yù)先設(shè)置的映射規(guī)則定義文件以及模型關(guān)聯(lián)信息和對象模型,生成關(guān)系模型和映射文件。在自動轉(zhuǎn)換引擎中,第一自動轉(zhuǎn)換引擎根據(jù)預(yù)先設(shè)置的映射規(guī)則定義文件、模型關(guān)聯(lián)信息和對象模型生成映射文件,而模型輸出工具根據(jù)映射文件生成關(guān)系模型,用戶可以利用得到的關(guān)系模型來訪問數(shù)據(jù)庫。這里以模型輸出工具是Hibernate模型輸出工具為例,那么映射文件包括Hibernate映射文件和Hibernate配置文件。與圖1所示的系統(tǒng)相比,圖2所示的系統(tǒng)中Hibernate模型輸出工具導(dǎo)出的關(guān)系模型只能是數(shù)據(jù)定義語言(DDL)語句的建表腳本。
本發(fā)明實施例采用上述自動建立關(guān)系模型的IDE系統(tǒng),實現(xiàn)自動建立關(guān)系模型。本發(fā)明實施例的方法包括以下步驟步驟S1,設(shè)置對象模型到關(guān)系模型的映射規(guī)則,形成映射規(guī)則定義文件,模型信息采集引擎從對象模型中采集得到模型關(guān)聯(lián)信息,并將模型關(guān)聯(lián)信息發(fā)送給自動轉(zhuǎn)換引擎。其中,模型信息采集引擎從對象模型中采集模型關(guān)聯(lián)信息的過程可以為遍歷對象模型,并獲取模型關(guān)聯(lián)信息。
步驟S2,自動轉(zhuǎn)換引擎根據(jù)所述映射規(guī)則和模型關(guān)聯(lián)信息以及對象模型,自動生成關(guān)系模型。如果采用的是圖1所示的系統(tǒng),則自動轉(zhuǎn)換引擎還可以進一步生成映射文件。如果采用的是圖2所示的系統(tǒng),則步驟S2可以分為以下兩個步驟第一自動轉(zhuǎn)換引擎根據(jù)所述映射規(guī)則和模型關(guān)聯(lián)信息以及對象模型生成映射文件;模型輸出工具根據(jù)映射文件生成關(guān)系模型。所述映射文件包括Hibernate映射文件和Hibernate配置文件。
以下通過一個具體的對象模型來描述本發(fā)明的實施。
圖3是本發(fā)明實施例中所采用的對象模型的UML圖,圖中所用圖例為標準的UML例。該對象模型可以是預(yù)先通過IDE設(shè)計得到的域?qū)ο竽P?。在圖3中,所示對象模型分為客戶域、用戶域、帳戶域和產(chǎn)品域。
在客戶域中,客戶(Customer)擁有一個唯一的客戶標識(customerId),客戶擁有多個地址(Address),每個地址包括國家(country)和郵政編碼(zipCode)兩個字段;一個客戶擁有0~n帳戶(Account),即客戶和帳戶之間是一對多的關(guān)聯(lián)關(guān)系。
在用戶域中,用戶組(UserGroup)使用一個唯一的用戶組標識(groupId);用戶組和客戶之間的關(guān)聯(lián)關(guān)系是多對多的關(guān)聯(lián)關(guān)系,該關(guān)聯(lián)關(guān)系的屬性使用客戶用戶組關(guān)系(CustomerUserGroupRela)標識;用戶組和用戶(User)是一對多的關(guān)聯(lián)關(guān)系;用戶使用唯一的用戶標識(subsriberId),一個用戶包含0~n個服務(wù)號碼(ServiceNumber)、0~n個產(chǎn)品定購關(guān)系(ProductOrder)、以及0~n個支付關(guān)系(PaymentRelation);服務(wù)號碼使用唯一的服務(wù)號碼標識(serviceNumberId),服務(wù)號碼分為電話號碼(PhoneNumber)和綜合業(yè)務(wù)數(shù)據(jù)網(wǎng)(ISDN)號碼(IsdnMuber)兩類,兩類服務(wù)號碼的共同屬性放在服務(wù)號碼中;每個產(chǎn)品定購關(guān)系使用唯一的定購關(guān)系標識(oerderId),每個產(chǎn)品定購關(guān)系包含0~n個參數(shù)(OrderParameters),并且唯一關(guān)聯(lián)到一個產(chǎn)品(Product)。
在帳戶域中,帳戶使用唯一的帳戶標識(accountId);每個支付關(guān)系唯一關(guān)聯(lián)到一個帳戶,并唯一關(guān)聯(lián)到一個費用項(FeeItem);費用項使用唯一的費用項標識(feeItemId)。
在產(chǎn)品域中,產(chǎn)品使用唯一的產(chǎn)品標識(productId)。
模型信息采集引擎從上述對象模型中采集得到如下模型關(guān)聯(lián)信息1)實體模型,包括實體類型和值類型(或者叫結(jié)構(gòu)類型),實體類型例如用戶、客戶等,值類型例如地址、產(chǎn)品定購關(guān)系參數(shù)等;2)屬性模型,根據(jù)屬性的類型可以分為基本類型和擴展類型,擴展類型包括基于基本類型的擴展類型和結(jié)構(gòu)類型;3)關(guān)聯(lián)關(guān)系,分為單向關(guān)聯(lián)和雙向關(guān)聯(lián),其中單向關(guān)聯(lián)包括一對一關(guān)聯(lián)、一對多關(guān)聯(lián)、多對一關(guān)聯(lián),雙向關(guān)聯(lián)包括一對一關(guān)聯(lián)、一對多關(guān)聯(lián)、多對一關(guān)聯(lián)、多對多關(guān)聯(lián),另外關(guān)聯(lián)中可以帶有自己的屬性;4)繼承關(guān)系,只支持單根繼承方式;5)組合關(guān)系,包括一對一的組合和一對多的組合。
針對這些模型關(guān)聯(lián)信息以及對象模型,描述相應(yīng)的映射規(guī)則。
一、實體模型的映射規(guī)則。其中包括實體類型的映射規(guī)則和值類型的映射規(guī)則。
1、實體類型的映射規(guī)則。實體類型映射包括單鍵實體類(SingleKeyEntity)的映射和復(fù)合主鍵(也成為多主鍵)實體類(MultiKeyEntity)的映射。單鍵實體類的映射規(guī)則為類映射到同名或不同名的表;主鍵屬性映射為表的主鍵;非主鍵屬性映射為表的字段,并且字段的類型和約束可以在IDE中設(shè)置。例如,圖4a所示的單鍵實體類根據(jù)該映射規(guī)則映射為圖4b所示的關(guān)系模型。在圖4a和圖4b中,類以及表名稱為單鍵實體(SingleKeyEntity),主鍵屬性為長整型(Long)的標識(id),非主鍵屬性包括字符串型(String)的名稱(name)和描述(description)。
復(fù)合主鍵實體類的映射規(guī)則為類映射到表,類對應(yīng)的表名稱可以同名或者在IDE中設(shè)置;主鍵屬性映射為表的主鍵,如果主鍵是主鍵類,則主鍵類所有的屬性映射到表的復(fù)合主鍵字段;非主鍵屬性映射為表的字段,并且字段的類型和約束可以在IDE中設(shè)置。在實際應(yīng)用中,根據(jù)主鍵的處理方式,復(fù)合主鍵實體類包含如圖5a和圖5b所示的兩種形式,在圖5a中實體類主鍵是基于實體屬性的復(fù)合主鍵;在圖5b中實體類主鍵是基于單獨的主鍵類的復(fù)合主鍵,在這種復(fù)合主鍵實體類的模型中需要指明哪個類是主鍵類型,哪個字段是主鍵。根據(jù)上述映射規(guī)則,圖5a和圖5b所示的兩種復(fù)合主鍵類實體的都映射為如圖5c所示的關(guān)系模型。
2、值類型的映射規(guī)則。所謂的“值類型”是指結(jié)構(gòu)類型等自定義類型,通常作為實體的一個屬性存在,分為單成員屬性和集合屬性兩種形式,因此值類型在和實體類型之間的關(guān)系是單向(從實體類型到值類型)一對一或者一對多關(guān)聯(lián)。
其中,對于一對一值類型的映射,可使用映射到同一張表中的映射規(guī)則1實體類映射到表,類對應(yīng)的表名稱可以同名或者在IDE中設(shè)置;實體主鍵屬性映射為表的主鍵;值類型的多個屬性映射到實體類對應(yīng)的表的多個字段;非主鍵屬性映射為表的字段,其中字段的類型和約束可以在IDE中設(shè)置。根據(jù)映射規(guī)則1,可以將如圖6a所示的對象模型映射到如圖6b所示的關(guān)系模型。還可以使用映射規(guī)則2實體類和值類型分別映射到兩張獨立的表中;值類型對應(yīng)的表中增加實體類的主鍵字段,作為值類型的主鍵和外鍵。可見,根據(jù)映射規(guī)則2,實體類和值類型分別映射到兩張表中,使用主鍵和外鍵進行關(guān)聯(lián),根據(jù)映射規(guī)則2,可以將如圖6a所示的對象模型映射為如圖6c所示的關(guān)系模型。
對于一對多值類型的映射,可以采用如下映射規(guī)則實體類和值類型分別映射到兩張獨立的表中;值類型對應(yīng)的表中增加實體類的主鍵字段,作為值類型的外鍵,值類型有單獨的主鍵字段。采用該映射規(guī)則,得到的對象模型映射如圖6d所示。在圖6a至圖6d中,類及表名稱包括客戶實體類型(CustomerEntityType)、地址值類型(AddressValueType),屬性包括id、name、描述(desc)、country、address、zipcode等。
二、屬性模型的映射規(guī)則。如前所述,根據(jù)屬性的類型可以分為基本類型和擴展類型,擴展類型包括基于基本類型的擴展類型和結(jié)構(gòu)類型。
其中,基本類型包括原始類型和大數(shù)據(jù)類型,原始類型包括整型(integer)、長整型(long)、短整型(short)、浮點型(float)字符串(string)、日期date、時間(time)等,大數(shù)據(jù)類型包括二進制(binary)、文本(text)等?;绢愋陀成涞綌?shù)據(jù)庫的字段,每個基本類型映射到字段的類型可以由使用給定的默認值,也可以由用戶指定,例如字符串的長度?;诨绢愋偷臄U展類型如IP地址(IPAddress)等,其映射規(guī)則與對應(yīng)的基本類型一樣。結(jié)構(gòu)類型和其所屬的類映射到同一張表。
三、關(guān)聯(lián)關(guān)系的映射規(guī)則。
1、單向關(guān)聯(lián)的映射規(guī)則。單向關(guān)聯(lián)可以分為單向一對一關(guān)聯(lián)、單向一對多關(guān)聯(lián)、單向多對一關(guān)聯(lián)以及單向多對多關(guān)聯(lián),下面分別說明它們的映射規(guī)則。在下面的描述中,被關(guān)聯(lián)類是指UML圖中關(guān)聯(lián)箭頭所指向的類,關(guān)聯(lián)類是指UML圖中關(guān)聯(lián)線另一側(cè)所對應(yīng)的類。
1)單向一對一關(guān)聯(lián)關(guān)系可以采用如下三種映射規(guī)則。第一種映射規(guī)則與前面所述的一對一值類型的映射規(guī)則相同,將關(guān)聯(lián)類和被關(guān)聯(lián)類合并為一張表,具體為關(guān)聯(lián)類映射到表,表名稱可以同名或者在IDE中設(shè)置;關(guān)聯(lián)類和被關(guān)聯(lián)類的屬性映射到表的字段,其中字段的類型和約束可以在IDE中設(shè)置。
第二種映射規(guī)則是基于主鍵的關(guān)聯(lián)映射實現(xiàn),一張表的主鍵作為另外一張表的唯一外鍵,根據(jù)該規(guī)則可以將如圖7a所示的關(guān)聯(lián)關(guān)系映射為如圖7b所示的關(guān)系模型。第二種映射規(guī)則為關(guān)聯(lián)類和被關(guān)聯(lián)類分別映射到兩張表;被關(guān)聯(lián)類對應(yīng)的表使用關(guān)聯(lián)類的主鍵作為自己的主鍵和外鍵字段,如圖7b中的定購標識(orderId)字段。在圖7a和圖7b中,類及表名稱包括定購關(guān)系實體類型(ProductOrderEntityType)、定購關(guān)系描述類型(ProductOrderDexcriptionType),屬性包括orderId、用戶標識(userId)、productId、description等。
第三種映射規(guī)則是基于外鍵的關(guān)聯(lián)映射實現(xiàn)。第三種映射規(guī)則為關(guān)聯(lián)類和被關(guān)聯(lián)類分別映射到兩張表;被關(guān)聯(lián)類對應(yīng)的表使用關(guān)聯(lián)類的主鍵作為自己的外鍵字段,并使用單獨的主鍵字段?;陉P(guān)聯(lián)表的映射實現(xiàn),考慮到多表關(guān)聯(lián)的性能問題,不推薦使用第三種映射規(guī)則。
2)單向一對多關(guān)聯(lián)可以采用如下三種映射規(guī)則。第一種映射規(guī)則通過外鍵實現(xiàn)關(guān)聯(lián),將如圖8a所示的對象關(guān)系映射到如圖8b所示的關(guān)系模型,在帳戶實體類型(AccountEntityType)4表中增加一個外鍵字段customerId。第一種映射規(guī)則為關(guān)聯(lián)類和被關(guān)聯(lián)類分別映射到兩張表;被關(guān)聯(lián)類對應(yīng)的表使用關(guān)聯(lián)類的主鍵作為自己的外鍵字段,如圖8b中的customerId字段,被關(guān)聯(lián)類有自己的主鍵屬性。另外,圖8a和圖8b中,屬性還包括標題(title)和平衡(balance)等。
第二種映射規(guī)則和第三種映射規(guī)則都使用連接表實現(xiàn)關(guān)聯(lián),分別將如圖8a所示的對象關(guān)系映射為如圖8c和圖8d所示的。根據(jù)第二種和第三種映射規(guī)則,創(chuàng)建一張連接表客戶帳戶關(guān)聯(lián)(CustomerAccountAssoc),該表中只存放兩個外鍵customerId和accountId字段。在第二種映射規(guī)則中,關(guān)聯(lián)表沒有屬于自己的主鍵,全部使用外鍵唯一標識,不需要指定主鍵的生成方式,該第二種映射規(guī)則為關(guān)聯(lián)類和被關(guān)聯(lián)類分別映射到兩張表;創(chuàng)建一個新的連接表,表中的字段只包含關(guān)聯(lián)類和被關(guān)聯(lián)類的主鍵字段。在第三種映射規(guī)則中,關(guān)聯(lián)表有屬于自己的主鍵關(guān)聯(lián)標識(assocId),因此需要指定主鍵的生成方式,例如基于特定的算法或者基于數(shù)據(jù)庫的組件生成策略,第三種映射規(guī)則為關(guān)聯(lián)類和被關(guān)聯(lián)類分別映射到兩張表;創(chuàng)建一個新的連接表,表中的字段只包含關(guān)聯(lián)類和被關(guān)聯(lián)類的主鍵字段,同時關(guān)聯(lián)表有自己的主鍵字段。優(yōu)選地,使用第三種映射規(guī)則。
3)單向多對一關(guān)聯(lián)的可以使用如下三種映射規(guī)則。
第一種映射規(guī)則為基于外鍵的實現(xiàn)方式,將如圖9a的對象關(guān)系映射為如圖9b所示的關(guān)系模型。第一種映射規(guī)則為關(guān)聯(lián)類和被關(guān)聯(lián)類分別映射到兩張表;關(guān)聯(lián)類使用被關(guān)聯(lián)類的主鍵屬性作為外鍵字段。
第二種映射規(guī)則和第三種映射規(guī)則都是基于關(guān)聯(lián)表的實現(xiàn)方式,如圖9c和圖9d所示,分別創(chuàng)建一張新的關(guān)聯(lián)表定購產(chǎn)品關(guān)聯(lián)(OrderProductAssoc),通過外鍵實現(xiàn)兩張表的關(guān)聯(lián),圖9c所示的根據(jù)第二種映射規(guī)則得到的關(guān)聯(lián)表沒有屬于自己的主鍵,而圖9d所示的根據(jù)第三種映射規(guī)則得到的關(guān)聯(lián)表有屬于自己的主鍵assocId,需要指定關(guān)聯(lián)表的主鍵生成方式。第二種映射規(guī)則為關(guān)聯(lián)類和被關(guān)聯(lián)類分別映射到兩張表;創(chuàng)建一個新的連接表,表中的字段只包含關(guān)聯(lián)類和被關(guān)聯(lián)類的主鍵字段。第三種映射規(guī)則為關(guān)聯(lián)類和被關(guān)聯(lián)類分別映射到兩張表;創(chuàng)建一個新的連接表,表中的字段只包含關(guān)聯(lián)類和被關(guān)聯(lián)類的主鍵字段,連接表同時有自己的主鍵字段。另外,圖9a至圖9d中,類及表名稱還包括產(chǎn)品定購實體類型(ProductOrderEntityType)5、產(chǎn)品類型(ProductType)5等。
4)單向多對多關(guān)聯(lián)使用如下映射規(guī)則關(guān)聯(lián)類和被關(guān)聯(lián)類分別映射到兩張表,屬性對象映射到一張連接表;創(chuàng)建一個新的連接表,表中的字段只包含關(guān)聯(lián)類和被關(guān)聯(lián)類的主鍵字段,連接表的某個字段和前面的主鍵字段聯(lián)合起來作為主鍵。根據(jù)該映射規(guī)則,將如圖10a所示的對象關(guān)系映射為如圖10b所示的關(guān)系模型。如圖10a所示,單向多對多關(guān)聯(lián)可以轉(zhuǎn)換為兩個一對多的關(guān)聯(lián),因此必須使用如圖10b中所示的連接表實現(xiàn)單向多對多的關(guān)聯(lián),尤其是關(guān)聯(lián)本身具有某些屬性。和前面所述幾種基于連接表的映射規(guī)則不同的是,這里有一個值對象用戶組關(guān)聯(lián)類型(UserGroupAssocType)4,因此轉(zhuǎn)換到Hibernate映射文件需要指定該值對象的映射規(guī)則,例如基于特定的算法或者基于數(shù)據(jù)庫的組件生成策略。另外,圖10a和圖10b中,類及表名稱還包括關(guān)聯(lián)類型(AssociationType)4、用戶組實體類型(UserGroupEntityType)4、用戶實體類型(UserEntityType)4,屬性還包括狀態(tài)(status)等。
2、雙向關(guān)聯(lián)映射規(guī)則與單向關(guān)聯(lián)映射規(guī)則的相同,這里不再贅述。具體為1)雙向一對一關(guān)聯(lián)的映射規(guī)則與單向一對一關(guān)聯(lián)的映射規(guī)則一樣;2)雙向一對多關(guān)聯(lián)的映射規(guī)則與單向一對多關(guān)聯(lián)的映射規(guī)則一樣,雙向多對一關(guān)聯(lián)的映射規(guī)則與一對多關(guān)聯(lián)的映射規(guī)則一樣;3)雙向多對多關(guān)聯(lián)的映射規(guī)則與單向多對多關(guān)聯(lián)的規(guī)則映射一樣。
四、繼承關(guān)系的映射規(guī)則。
本發(fā)明實施例對于繼承關(guān)系到關(guān)系模型的映射提供三種映射規(guī)則,第一種映射規(guī)則采用每個類分層結(jié)構(gòu)一張表,第二種映射規(guī)則采用每個子類一張表,第三種映射規(guī)則采用每個具體類一張表。下面根據(jù)如圖11a所示的對象關(guān)系,分別描述這三種映射規(guī)則。圖11a至圖11d中,類及表名稱還包括服務(wù)(Service)、消息服務(wù)(MessagingService)、無線應(yīng)用協(xié)議服務(wù)(WapService)、短消息服務(wù)(smsService)、多媒體消息服務(wù)(MmsService)、中間服務(wù)(MiddleService)、子服務(wù)(ChildService),屬性還包括接入碼(accessCode)、特征流(featureStr)、接入統(tǒng)一資源標識符(accessUrl)、主管統(tǒng)一資源標識符(chargingUrl)短消息網(wǎng)關(guān)標識(smsGatewayId)、郵箱(mailbox)等。
第一種映射規(guī)則為每個層次的類的所有屬性疊加到一張表中;父類使用類型(type)字段表示自己所在的層次;所有的子類層次對應(yīng)的表共用父類的主鍵作為外鍵唯一標識一條記錄。根據(jù)第一種映射規(guī)則,如圖11a所示的對象模型只需要三張表實現(xiàn),如圖11b所示,同一繼承層次的類的屬性放在一張表中實現(xiàn),這樣不可避免的導(dǎo)致屬性的冗余,子類層次對應(yīng)的表與父類層次對應(yīng)的表是一對一的關(guān)系。第一種映射規(guī)則中需要考慮的事情比較多,如同一層次類的字段名不能重名,子類類型的編碼,并且很多不同類型的字段混合存放在一張表中,也不便于管理。
第二種映射規(guī)則為每個子類生成一張單獨的表;每個子類對應(yīng)的表使用父類的主鍵作為外鍵唯一標識一條記錄。使用第二種映射規(guī)則得到如圖11c所示的關(guān)系模型。第二種映射規(guī)則的優(yōu)點是可以清楚的表達類之間的繼承關(guān)系,對于包含三層以上的繼承關(guān)系時比較合適,并且每個子類對應(yīng)的表可以有自己的主鍵生成策略;缺點是需要使用多表操作,性能有所下降。
第三種映射規(guī)則為每個具體類一張表,該表中包含了從最頂層的父類到該子類的所有字段的并集。如圖11a所示的對象關(guān)系使用第三種映射規(guī)則得到的關(guān)系模型如圖11d所示。第三種映射規(guī)則的局限在于類的繼承層次較多時,子類表中冗余字段較多;主鍵的生成需要考慮統(tǒng)一的生成策略,不允許子類有自己的主鍵生成策略;父類和子類不能有重名的字段。
五、組合關(guān)系的映射規(guī)則。
對象之間的組合關(guān)系包括一對一組合關(guān)系和一對多組合關(guān)系,這兩種關(guān)系的映射規(guī)則與值類型的映射規(guī)則相似。
其中,對于一對一組合關(guān)系的映射,可使用映射到同一張表中的第一種映射規(guī)則關(guān)聯(lián)屬性類映射到表,類對應(yīng)的表名稱可以同名或者在IDE中設(shè)置;關(guān)聯(lián)屬性類主鍵屬性映射為表的主鍵;被關(guān)聯(lián)屬性類的多個屬性映射到關(guān)聯(lián)屬性類對應(yīng)的表的多個字段;非主鍵屬性映射為表的字段,其中字段的類型和約束可以在IDE中設(shè)置。對于一對一組合關(guān)系的映射還可以使用第二種映射規(guī)則關(guān)聯(lián)屬性類和被關(guān)聯(lián)屬性類分別映射到兩張獨立的表中;被關(guān)聯(lián)屬性類對應(yīng)的表中增加關(guān)聯(lián)屬性類的主鍵字段,作為被關(guān)聯(lián)屬性類的主鍵和外鍵。根據(jù)第二種映射規(guī)則,關(guān)聯(lián)屬性類和被關(guān)聯(lián)屬性類分別映射到兩張表中,使用主鍵和外鍵進行關(guān)聯(lián)。
對于一對多值組合關(guān)系的映射,可以采用如下映射規(guī)則關(guān)聯(lián)屬性類和被關(guān)聯(lián)屬性類分別映射到兩張獨立的表中;被關(guān)聯(lián)屬性類對應(yīng)的表中增加關(guān)聯(lián)屬性類的主鍵字段,作為被關(guān)聯(lián)屬性類的外鍵,被關(guān)聯(lián)屬性類有單獨的主鍵字段。
以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
權(quán)利要求
1.一種自動建立關(guān)系模型的集成開發(fā)環(huán)境IDE系統(tǒng),其特征在于,該系統(tǒng)包括模型信息采集引擎,用于從對象模型采集得到模型關(guān)聯(lián)信息,并將所述模型關(guān)聯(lián)信息發(fā)送給自動轉(zhuǎn)換引擎;自動轉(zhuǎn)換引擎,用于根據(jù)預(yù)設(shè)的映射規(guī)則定義文件、所述模型關(guān)聯(lián)信息和對象模型,生成關(guān)系模型。
2.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述自動轉(zhuǎn)換引擎進一步用于生成映射文件。
3.根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述自動轉(zhuǎn)換引擎包括第一自動轉(zhuǎn)換引擎,用于根據(jù)預(yù)設(shè)的映射規(guī)則定義文件、所述模型關(guān)聯(lián)信息和對象模型,生成映射文件;模型輸出工具,用于根據(jù)所述映射文件生成關(guān)系模型。
4.一種自動建立關(guān)系模型的方法,其特征在于,該方法包括以下步驟設(shè)置對象模型到關(guān)系模型的映射規(guī)則,以及從對象模型中采集模型關(guān)聯(lián)信息;根據(jù)所述映射規(guī)則和模型關(guān)聯(lián)信息以及對象模型,自動生成關(guān)系模型。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述從對象模型中采集模型關(guān)聯(lián)信息的步驟為遍歷對象模型,并獲取模型關(guān)聯(lián)信息。
6.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述根據(jù)映射規(guī)則和模型關(guān)聯(lián)信息以及對象模型自動生成關(guān)系模型的步驟包括根據(jù)所述映射規(guī)則和模型關(guān)聯(lián)信息以及對象模型生成映射文件;根據(jù)映射文件生成關(guān)系模型。
7.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述根據(jù)映射規(guī)則和模型關(guān)聯(lián)信息以及對象模型自動生成關(guān)系模型的步驟進一步包括生成映射文件的步驟。
8.根據(jù)權(quán)利要求6或7所述的方法,其特征在于,所述映射文件包括Hibernate映射文件和Hibernate配置文件。
9.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述模型關(guān)聯(lián)信息包括單鍵實體類;所述映射規(guī)則包括類映射到表;主鍵屬性映射為表的主鍵;非主鍵屬性映射為表的字段;或者所述模型關(guān)聯(lián)信息包括復(fù)合主鍵實體類;所述映射規(guī)則包括類映射到表;主鍵屬性映射為表的主鍵,主鍵類所有的屬性映射到表的復(fù)合主鍵字段;非主鍵屬性映射為表的字段。
10.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述模型關(guān)聯(lián)信息包括實體類型和值類型,且所述實體類與值類型為一對一關(guān)系;所述映射規(guī)則為實體類映射到表;實體主鍵屬性映射為表的主鍵;值類型的多個屬性映射到實體類對應(yīng)的表的多個字段;非主鍵屬性映射為表的字段;或者所述映射規(guī)則為實體類和值類型分別映射到兩張獨立的表;值類型對應(yīng)的表中增加實體類的主鍵字段,作為值類型的主鍵和外鍵。
11.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述模型關(guān)聯(lián)信息包括實體類型和值類型,且所述實體類與值類型為一對多關(guān)系;所述映射規(guī)則為實體類和值類型分別映射到兩張獨立的表;值類型對應(yīng)的表中增加實體類的主鍵字段,作為值類型的外鍵,且值類型有單獨的主鍵字段。
12.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述模型關(guān)聯(lián)信息包括屬性類型;所述屬性類型為基本類型或基于擴展的基本類型時,所述映射規(guī)則包括屬性類型映射到數(shù)據(jù)庫的字段;和/或所述屬性類型為結(jié)構(gòu)類型時,所述映射規(guī)則包括結(jié)構(gòu)類型與其所述的類映射到同一張表。
13.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述模型關(guān)聯(lián)信息包括關(guān)聯(lián)類與被關(guān)聯(lián)類單向一對一關(guān)聯(lián)關(guān)系和/或關(guān)聯(lián)類和被關(guān)聯(lián)類雙向一對多關(guān)聯(lián)關(guān)系;所述映射規(guī)則為關(guān)聯(lián)類映射到表;關(guān)聯(lián)類和被關(guān)聯(lián)類的屬性映射到表的字段;或者所述映射規(guī)則為關(guān)聯(lián)類和被關(guān)聯(lián)類分別映射到兩張表;被關(guān)聯(lián)類對應(yīng)的表使用關(guān)聯(lián)類的主鍵作為自己的主鍵和外鍵字段;或者所述映射規(guī)則為關(guān)聯(lián)類和被關(guān)聯(lián)類分別映射到兩張表;被關(guān)聯(lián)類對應(yīng)的表使用關(guān)聯(lián)類的主鍵作為自己的外鍵字段,并使用單獨的主鍵字段。
14.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述模型關(guān)聯(lián)信息包括關(guān)聯(lián)類和被關(guān)聯(lián)類單向一對多關(guān)聯(lián)關(guān)系,和/或關(guān)聯(lián)類和被關(guān)聯(lián)類雙向一對多關(guān)聯(lián)關(guān)系,和/或關(guān)聯(lián)類和被關(guān)聯(lián)類雙向多對一關(guān)聯(lián)關(guān)系;所述映射規(guī)則為關(guān)聯(lián)類和被關(guān)聯(lián)類分別映射到兩張表;被關(guān)聯(lián)類對應(yīng)的表使用關(guān)聯(lián)類的主鍵作為自己的外鍵字段;或者所述映射規(guī)則為關(guān)聯(lián)類和被關(guān)聯(lián)類分別映射到兩張表;創(chuàng)建一個新的連接表,表中的字段包含關(guān)聯(lián)類和被關(guān)聯(lián)類的主鍵字段;或者所述映射規(guī)則為關(guān)聯(lián)類和被關(guān)聯(lián)類分別映射到兩張表;創(chuàng)建一個新的連接表,表中的字段包含關(guān)聯(lián)類和被關(guān)聯(lián)類的主鍵字段,同時關(guān)聯(lián)表有自己的主鍵字段。
15.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述模型關(guān)聯(lián)信息包括關(guān)聯(lián)類和被關(guān)聯(lián)類單向多對一關(guān)聯(lián)關(guān)系;所述映射規(guī)則為關(guān)聯(lián)類和被關(guān)聯(lián)類分別映射到兩張表;關(guān)聯(lián)類使用被關(guān)聯(lián)類的主鍵屬性作為外鍵字段;或者所述映射規(guī)則為關(guān)聯(lián)類和被關(guān)聯(lián)類分別映射到兩張表;創(chuàng)建一個新的連接表,表中的字段包含關(guān)聯(lián)類和被關(guān)聯(lián)類的主鍵字段;或者所述映射規(guī)則為關(guān)聯(lián)類和被關(guān)聯(lián)類分別映射到兩張表;創(chuàng)建一個新的連接表,表中的字段包含關(guān)聯(lián)類和被關(guān)聯(lián)類的主鍵字段,連接表同時有自己的主鍵字段。
16.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述模型關(guān)聯(lián)信息包括關(guān)聯(lián)類和被關(guān)聯(lián)類多對多關(guān)聯(lián)關(guān)系和/或關(guān)聯(lián)類和被關(guān)聯(lián)類雙向多對多關(guān)聯(lián)關(guān)系;所述映射規(guī)則為關(guān)聯(lián)類和被關(guān)聯(lián)類分別映射到兩張表,屬性對象映射到一張連接表;創(chuàng)建一個新的連接表,該新連接表中的字段只包含關(guān)聯(lián)類和被關(guān)聯(lián)類的主鍵字段,并且新連接表的某個字段和前面的主鍵字段聯(lián)合起來作為主鍵。
17.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述模型關(guān)聯(lián)信息包括父類與子類的繼承關(guān)系;所述映射規(guī)則為每個層次的類的所有屬性疊加到一張表中;父類使用類型字段表示自己所在的層次;所有的子類層次對應(yīng)的表共用父類的主鍵作為外鍵唯一標識一條記錄;或者所述映射規(guī)則為每個子類生成一張單獨的表;每個子類對應(yīng)的表使用父類的主鍵作為外鍵唯一標識一條記錄;或者所述映射規(guī)則為每個具體類一張表,該表中包含了從最頂層的父類到該子類的所有字段的并集。
18.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述模型關(guān)聯(lián)信息包括關(guān)聯(lián)屬性類和被關(guān)聯(lián)屬性類一對一組合關(guān)系;所述映射規(guī)則為關(guān)聯(lián)屬性類映射到表;關(guān)聯(lián)屬性類主鍵屬性映射為表的主鍵;被關(guān)聯(lián)屬性類的多個屬性映射到關(guān)聯(lián)類對應(yīng)的表的多個字段;非主鍵屬性映射為表的字段;或者所述映射規(guī)則為關(guān)聯(lián)屬性類和被關(guān)聯(lián)屬性類分別映射到兩張獨立的表中;被關(guān)聯(lián)屬性類對應(yīng)的表中增加關(guān)聯(lián)屬性類的主鍵字段,作為被關(guān)聯(lián)屬性類的主鍵和外鍵。
19.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述模型關(guān)聯(lián)信息包括關(guān)聯(lián)屬性類和被關(guān)聯(lián)屬性類一對多組合關(guān)系;所述映射規(guī)則為關(guān)聯(lián)屬性類和被關(guān)聯(lián)屬性類分別映射到兩張獨立的表中;被關(guān)聯(lián)屬性類對應(yīng)的表中增加關(guān)聯(lián)屬性類的主鍵字段,作為被關(guān)聯(lián)屬性類的外鍵,且被關(guān)聯(lián)屬性類有單獨的主鍵字段。
全文摘要
本發(fā)明公開了一種自動建立關(guān)系模型的方法,該方法包括設(shè)置對象模型到關(guān)系模型的映射規(guī)則,以及從對象模型中采集模型關(guān)聯(lián)信息;根據(jù)所述映射規(guī)則和所采集的對象模型關(guān)聯(lián)信息以及對象模型,自動生成關(guān)系模型。本發(fā)明還公開了一種自動建立關(guān)系模型的系統(tǒng),該系統(tǒng)包括模型信息采集引擎,用于從對象模型采集得到模型之間的關(guān)聯(lián)信息,并將所述模型關(guān)聯(lián)信息發(fā)送給自動轉(zhuǎn)換引擎;自動轉(zhuǎn)換引擎,用于根據(jù)預(yù)設(shè)的映射規(guī)則定義文件、所述模型關(guān)聯(lián)信息和對象模型,自動生成關(guān)系模型。本發(fā)明提高了對象模型到關(guān)系模型映射的自動化程度,降低了手工定義對象模型到關(guān)系模型映射的工作量和由此導(dǎo)致的錯誤比率,簡化了開發(fā)人員的工作,從而提高了開發(fā)效率。
文檔編號G06F17/30GK101046810SQ20061007842
公開日2007年10月3日 申請日期2006年5月26日 優(yōu)先權(quán)日2006年5月26日
發(fā)明者孟慶光 申請人:華為技術(shù)有限公司