一種erwin模型軟件更新方法和裝置制造方法
【專利摘要】本發(fā)明提供了一種ERWIN模型軟件更新的方法,其通過將舊版本ERD的副本臨時(shí)保存在各個(gè)本地設(shè)備,在各本地設(shè)備上比對新舊版本ERD得到各內(nèi)置對象的變更清單,將各本地設(shè)備的變更清單合并后進(jìn)行ERD的更新,將ERD的更新的并行處理,對于大數(shù)量更新的場景而言,顯著提高了更新處理的效率。并且,本發(fā)明還提供了相應(yīng)的裝置。實(shí)施本發(fā)明提供的方法和裝置,實(shí)現(xiàn)了大規(guī)模ERWIN模型的并行更新,并且可有效提高并行的數(shù)據(jù)處理的速度、準(zhǔn)確度。
【專利說明】一種ERWIN模型軟件更新方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)軟件領(lǐng)域,更為具體而言,涉及一種ERWIN模型軟件更新方法和裝置。
【背景技術(shù)】
[0002]ERWIN,是目前國內(nèi)外應(yīng)用最廣泛的建模工具之一,全稱為AllFuusin ERwin DataModeler,是CA公司AllFuusin品牌下的數(shù)據(jù)建模工具,支持各主流數(shù)據(jù)庫系統(tǒng)。當(dāng)ERWIN模型達(dá)到一定規(guī)模,特別是涉及多主題域(例如,涉及多達(dá)100個(gè)以上主題域)并行開發(fā)時(shí),對ERWIN模型文件的維護(hù)管理難度就非常的大。以中國建設(shè)銀行股份有限公司為例,企業(yè)級ERD模型文件已超過90兆,內(nèi)含100多個(gè)主題域,2000多個(gè)實(shí)體,20000多個(gè)屬性,接近5000個(gè)域,而且每天都會(huì)接收上游和下游提出的各種類型的數(shù)據(jù)需求,如此大規(guī)模的應(yīng)用場景下,采用人工更新維護(hù)操作的處理效率比較低下。此外,模型數(shù)據(jù)之間存在各種各樣的相互關(guān)系等,而ERWIN自身也無法智能地判斷各內(nèi)置對象的更新次序,如果通過人工判斷方法進(jìn)行處理,效率較低而且出錯(cuò)概率較高。
【發(fā)明內(nèi)容】
[0003]本發(fā)明提供了一種ERWIN模型軟件更新方法和裝置,通過將舊版本ERD的副本臨時(shí)保存在各個(gè)本地設(shè)備,在各本地設(shè)備各自修改后通過比對新舊版本ERD得到各內(nèi)置對象的變更清單,再將各本地設(shè)備的變更清單通過導(dǎo)入工具進(jìn)行ERD的更新,如此實(shí)現(xiàn)了對同一份ERD文件的并行處理,對于大數(shù)據(jù)量更新的場景,明顯地提高了更新處理的效率。
[0004]根據(jù)本發(fā)明實(shí)施方式的第一方面,提供了一種ERWIN模型軟件更新的方法,具體可包括:
[0005]將舊版本ERD的副本分別保存到多個(gè)本地設(shè)備,在各本地設(shè)備上修改所述副本得到各分組的臨時(shí)修改版ERD ;
[0006]利用ERWIN的應(yīng)用程序編程接口獲取各本地設(shè)備上舊版本ERD和臨時(shí)修改版ERD的內(nèi)置對象的關(guān)聯(lián)信息,并將各自所獲取的內(nèi)置對象的關(guān)聯(lián)信息進(jìn)行比對,得到各分組內(nèi)置對象的變更清單,其中所述內(nèi)置對象包括:主題域、實(shí)體、屬性和關(guān)系;
[0007]將各分組的變更清單通過ERWIN的應(yīng)用程序編程接口依次導(dǎo)入舊版本ERD進(jìn)行更新。
[0008]根據(jù)本發(fā)明實(shí)施方式的第二方面,提供了 一種ERWIN模型軟件更新的裝置,包括:
[0009]第一處理模塊,用于將舊版本ERD的副本分別保存到多個(gè)本地設(shè)備,在各本地設(shè)備上修改所述副本得到各分組的臨時(shí)修改版ERD ;
[0010]比對模塊,用于利用ERWIN的應(yīng)用程序編程接口 API獲取各本地設(shè)備上舊版本ERD和對應(yīng)的臨時(shí)修改版ERD的內(nèi)置對象的關(guān)聯(lián)信息,并將各自所獲取的內(nèi)置對象的關(guān)聯(lián)信息進(jìn)行比對,得到各分組內(nèi)置對象的變更清單,其中所述內(nèi)置對象包括:主題域、實(shí)體、屬性和關(guān)系;[0011]更新模塊,用于將各分組的變更清單通過ERWIN的應(yīng)用程序編程接口依次導(dǎo)入舊版本ERD進(jìn)行更新。
[0012]實(shí)施本發(fā)明實(shí)施方式提供的ERWIN模型軟件更新的方法和裝置,可以以分組并行的形式在多個(gè)本地設(shè)備上進(jìn)行ERD的修改后再執(zhí)行統(tǒng)一的更新操作,在大數(shù)量更新的情況下,可顯著提高ERD更新處理的數(shù)據(jù)處理效率。
【專利附圖】
【附圖說明】
[0013]圖1圖示了根據(jù)本發(fā)明一種實(shí)施方式的ERWIN模型軟件更新的方法的流程示意圖;
[0014]圖2圖示了根據(jù)本發(fā)明一種實(shí)施方式的新舊ERD版本中屬性比對的流程示意圖;
[0015]圖3A至圖3C圖示了根據(jù)本發(fā)明一種實(shí)施方式的實(shí)體變更清單導(dǎo)入的流程示意圖;
[0016]圖4A至圖4C圖示了根據(jù)本發(fā)明一種實(shí)施方式的屬性變更清單導(dǎo)入的流程示意圖;
[0017]圖5A至圖5C圖示了根據(jù)本發(fā)明一種實(shí)施方式的關(guān)系管更清單導(dǎo)入的流程示意圖;
[0018]圖6圖示了根據(jù)本發(fā)明一種實(shí)施方式的ERWIN模型軟件更新的裝置的示意圖?!揪唧w實(shí)施方式】
[0019]為使本發(fā)明的實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對本發(fā)明作進(jìn)一步地詳細(xì)描述。
[0020]參見圖1,圖示了根據(jù)本發(fā)明一種實(shí)施方式的ERWIN模型軟件更新的方法的流程示意圖,具體可包括:
[0021]S100,將舊版本ERD的副本分別保存到多個(gè)本地設(shè)備,在各本地設(shè)備上修改所述副本得到各分組的臨時(shí)修改版ERD ;
[0022]S101,利用ERWIN的應(yīng)用程序編程接口獲取各本地設(shè)備上舊版本ERD和臨時(shí)修改版ERD的內(nèi)置對象的關(guān)聯(lián)信息,并將各自所獲取的內(nèi)置對象的關(guān)聯(lián)信息進(jìn)行比對,得到各分組內(nèi)置對象的變更清單,其中所述內(nèi)置對象包括:主題域、實(shí)體、屬性和關(guān)系;
[0023]S102,將各分組的變更清單通過ERWIN的應(yīng)用程序編程接口依次導(dǎo)入舊版本ERD進(jìn)行更新。
[0024]在本發(fā)明的一種實(shí)施案例中,ERD模型文件屬于企業(yè)級C模型,可涉及上百個(gè)主題域、上千個(gè)實(shí)體、上萬個(gè)屬性、幾千個(gè)域。對這樣大規(guī)模的ERD模型文件,可以按照主題域進(jìn)行分組,分組的數(shù)目可以根據(jù)數(shù)據(jù)建模的需要靈活設(shè)置,例如,可分為2、3、4、5、6、7、8、9、10或更多個(gè)分組,每個(gè)分組各自獨(dú)立維護(hù)企業(yè)級C模型的一部分內(nèi)容,這一部分內(nèi)容是以舊版本ERD的副本的形式保存在本地設(shè)備上。換而言之,各本地設(shè)備上均保存的是舊版本ERD的副本,但實(shí)際維護(hù)的是ERD的一部分內(nèi)容。在此我們將臨時(shí)保存到本地設(shè)備上的ERD的副本稱為本地舊版本ERD。在舊版本ERD的副本保存到本地設(shè)備后,可以根據(jù)對ERD的數(shù)據(jù)建模需求對本地舊版本ERD進(jìn)行修改,得到本地臨時(shí)修改版ERD。
[0025]本發(fā)明的方法實(shí)施方式可在ERWIN7.3版本、VBA語言、EXCEL (2003版、2007版、2010版EXCEL均可以實(shí)施)的環(huán)境下進(jìn)行,其中會(huì)涉及到ERWIN的術(shù)語,下面對這些術(shù)語進(jìn)行簡單介紹。域(domain),是屬性的值的集合,是數(shù)據(jù)模型中屬性全面定義的一部分。以中國建設(shè)銀行為例,為便于管理,會(huì)按照企業(yè)級數(shù)據(jù)標(biāo)準(zhǔn)對數(shù)據(jù)類別進(jìn)行定義,從粗到細(xì)按照“域組/域”對域體系進(jìn)行定義和管理,將域劃分為十一大域組,具體包括編碼類、代碼類、指示器類、文本類、金額類、數(shù)值類、百分比類、日期類、時(shí)間類、日期時(shí)間類、非結(jié)構(gòu)化類。域是在域組的基礎(chǔ)上對域組的細(xì)分,用于規(guī)范實(shí)體屬性的數(shù)據(jù)類型、長度、小數(shù)點(diǎn)后位數(shù)、取值范圍、格式、業(yè)務(wù)規(guī)則等內(nèi)容。主題域(Subject-Area),是對數(shù)據(jù)模型的邏輯分組,根據(jù)不同的業(yè)務(wù)領(lǐng)域來劃分?jǐn)?shù)據(jù)實(shí)體,也可以把它理解為模型的視圖,在不同的主題域中可含有一些公共的實(shí)體,對應(yīng)ERWIN中的Subject-Area,每一個(gè)主題域均需要其主題域名稱、目的、定義、范圍、范圍之外、主題域編號。主題域還可以進(jìn)一步細(xì)分為子主題域,按照一級主題域_ 二級主題域_三級主題域的格式來分。實(shí)體(Entity),是一個(gè)唯一的事物,與業(yè)務(wù)相關(guān),ERWIN中的每一個(gè)實(shí)體均需要定義其實(shí)體名稱,所屬子主題域、目的、定義、范圍、范圍之外、實(shí)體編號。屬性(Attribute),可以作為數(shù)據(jù)來表達(dá)的實(shí)體特性,每一個(gè)屬性均需要定義其所屬實(shí)體、屬性名稱、目的、定義、范圍、范圍之外、域組、域、引用實(shí)體、引用屬性(引用實(shí)體和引用屬性反映屬性間的主外鍵關(guān)系)、是否為主鍵標(biāo)志、屬性編號。關(guān)系(Relationship),表達(dá)兩個(gè)實(shí)體之間的關(guān)聯(lián),具體可分為繼承關(guān)系和引用關(guān)系,每一個(gè)關(guān)系均需要定義其關(guān)系名稱、關(guān)系類型、父實(shí)體、子實(shí)體、關(guān)系基數(shù)等。
[0026]本發(fā)明實(shí)施方式中的ERWIN的內(nèi)置對象可包括主題域、實(shí)體、屬性和關(guān)系,在本地設(shè)備上利用 ERWIN 的應(yīng)用程序編程接口(Application Programming Interface, API)可以讀取ERWIN的內(nèi)置對象(包括臨時(shí)保存在本地設(shè)備的舊版本ERD,和本地設(shè)備上臨時(shí)修改得到的臨時(shí)修改版ERD的關(guān)聯(lián)信息,其中,所述關(guān)聯(lián)信息可以是內(nèi)置對象的信息,以內(nèi)置對象中的屬性為例,關(guān)聯(lián)信息可以是屬性的基本信息,以及屬性的上下文信息(包括屬性所屬實(shí)體的信息,和屬性關(guān)聯(lián)關(guān)系信息)。例如,在一些實(shí)施方式中,在一個(gè)本地設(shè)備上通過API獲取臨時(shí)保存的舊版本ERD的一個(gè)分組與該分組對應(yīng)的臨時(shí)修改版ERD的屬性的比對可以按照圖2所示的步驟進(jìn)行。首先,從舊版本ERD中導(dǎo)出舊版本屬性信息到EXCEL表的第一表shtl,導(dǎo)出的各舊版本屬性按照id升序排序。需要說明的是,ERWIN的每個(gè)內(nèi)置對象都有一個(gè)唯一的1ngid,此1ngid唯一標(biāo)識該內(nèi)置對象,全局唯一,由ERWIN自動(dòng)維護(hù),但在ERWIN的操作界面不可見,需要通過API獲取,以1ngid作為索引,可以獲取各內(nèi)置對象的新增、刪除和更新操作。在屬性信息表中包括下述條目的對應(yīng)信息:屬性id、屬性名稱、所屬實(shí)體id、目的、定義、范圍、范圍之外、域組、域、是否主鍵、屬性的業(yè)務(wù)規(guī)則。然后,通過API導(dǎo)出舊版本實(shí)體信息到第二表sht2,舊版本實(shí)體信息可包括下述條目的信息:實(shí)體id、實(shí)體名稱、目的、定義、范圍、范圍之外、實(shí)體所屬子主題域。然后,導(dǎo)出舊版本屬性關(guān)聯(lián)關(guān)系到第三表sht3,舊版本屬性關(guān)聯(lián)關(guān)系可包括下述條目的信息:父實(shí)體id、父實(shí)體名稱、父屬性id、父屬性名稱、子實(shí)體id、子實(shí)體名稱、子屬性id、子屬性名稱。然后從臨時(shí)修改版ERD導(dǎo)出臨時(shí)修改版屬性信息到第四表sht4,按屬性id升序排序,臨時(shí)修改版屬性信息包括下述條目的信息:屬性id、屬性名稱、所屬實(shí)體id、目的、定義、范圍、范圍之外、域組、域、是否主鍵、屬性的業(yè)務(wù)規(guī)則。接著通過API導(dǎo)出臨時(shí)修改版實(shí)體信息到第五表sht5,臨時(shí)修改版實(shí)體信息包括下述條目的信息:實(shí)體id、實(shí)體名稱、目的、定義、范圍、范圍之外、實(shí)體所屬子主題域。接著從臨時(shí)修改版ERD中通過API導(dǎo)出新版本屬性關(guān)聯(lián)關(guān)系到第六表sht6,新版本屬性關(guān)聯(lián)關(guān)系可包括下述條目的信息:父實(shí)體id、父實(shí)體名稱、父屬性id、父屬性名稱、子實(shí)體id、子實(shí)體名稱、子屬性id、子屬性名稱。通過屬性id查找在shtl中存在,而在sht4中不存在的屬性id,結(jié)合表sht2、sht3、sht5、sht6得出屬性變更清單中的刪除清單。通過屬性id查找在第四表sht4中存在,而在第一表shtl中不存在的屬性id,結(jié)合表sht2、sht3、sht5、sht6得出屬性變更清單中的新增清單。找出第一表shtl和第四表sht4中都存在的屬性id,并逐一比對這些都存在的屬性id對應(yīng)屬性的基本信息,并結(jié)合表sht2、sht3、sht5、sht6得出屬性變更清單的修改/更新清單。將通過上述比對得到的屬性變更清單中的刪除清單sht7、新增清單sht8、變更清單sht9匯總合并得到屬性變更清單shtlO。最終生成的屬性變更清單中可包括如下條目的信息:變更日期、變更類別、變更說明、子主題域、新版本實(shí)體名稱、新版本屬性名稱、新版本目的UDP、新版本定義UDP、新版本范圍Μ)Ρ、新版本范圍之外UDP、新版本業(yè)務(wù)規(guī)則UDP、新版本域組UDP、新版本域UDP、新版本引用實(shí)體名稱、新版本引用屬性名稱、新版本中是否為主鍵、新版本屬性編號UDP、舊版本實(shí)體名稱、舊版本屬性名稱、舊版本目的UDP、舊版本定義UDP、舊版本范圍UDP、舊版本范圍之外UDP、舊版本業(yè)務(wù)規(guī)則UDP、舊版本域組UDP、舊版本域UDP、舊版本引用實(shí)體名稱、就版本引用屬性名稱、舊版本中是否為主鍵、舊版本屬性編號UDP、變更原因、變更人等。另外的新舊版本ERD的主題域、實(shí)體、關(guān)系的比對類似,分別獲取新舊版本ERD的對應(yīng)的主題域信息表、實(shí)體信息表、關(guān)系信息表,并比對哪些條目是要?jiǎng)h除的、哪些是新增的、哪些是更新的。同樣地,主題域的變更清單、實(shí)體變更清單和關(guān)系變更清單也分別包括相應(yīng)的刪除清單、新增清單和更新/修改清單。也就是說,本發(fā)明實(shí)施方式中的變更清單包括刪除清單、新增清單和更新/修改清單。
[0027]在各個(gè)本地設(shè)備上各分組的獲取到新舊版本ERD的主題域、實(shí)體、屬性、關(guān)系的變更清單之后,將按照主題域、實(shí)體、屬性、關(guān)系的順序依次將主題域變更清單、實(shí)體變更清單、屬性變更清單、關(guān)系變更清單導(dǎo)入本地設(shè)備上舊版本ERD的分組進(jìn)行更新。上述內(nèi)置對象的變更清單的導(dǎo)入是通過對ERWIN的內(nèi)置對象主題域、實(shí)體、屬性、關(guān)系的寫入操作實(shí)現(xiàn)。ERWIN的內(nèi)置對象必須按照主題域、實(shí)體、屬性、關(guān)系的順序依次將它們的變更清單導(dǎo)入,是因?yàn)檫@些內(nèi)置對象之間存在的相互引用的關(guān)系,如果不按照上述順序依次導(dǎo)入會(huì)導(dǎo)致部分內(nèi)置對象更新發(fā)生混亂,無法實(shí)現(xiàn)ERD更新。
[0028]在一些應(yīng)用場景下,可能會(huì)出現(xiàn)誤操作,可能將某個(gè)內(nèi)置對象誤刪除,又希望將其增加的情形,這樣的情形下,本發(fā)明的實(shí)施方式通過先處理刪除清單,再處理新增清單,最后處理更新清單的方式解決。以實(shí)體變更清單的導(dǎo)入為例,參考圖3,說明實(shí)體變更清單的導(dǎo)入過程。參考圖3A,打開基線版本ERD,也就是上面所述的舊版本ERD,再打開實(shí)體變更清單,從實(shí)體變更清單中讀取待刪除的實(shí)體,并獲取該刪除實(shí)體的舊版本實(shí)體名稱OldEnt,并從ERD中查找實(shí)體OldEnt,若查找到實(shí)體OldEnt,則從ERD中刪除實(shí)體OldEnt,并輸出導(dǎo)入結(jié)果:刪除實(shí)體成功,若未查找到實(shí)體OldEnt,則輸出導(dǎo)入結(jié)果:要?jiǎng)h除的舊實(shí)體名在ERffIN中找不到,請核對后再導(dǎo)入。無論是查找到實(shí)體OldEnt,還是未查找到實(shí)體OldEnt,都會(huì)返回到詢問刪除實(shí)體清單是否處理完,若未處理刪除清單,請返回讀取下一條待刪除的實(shí)體,繼續(xù)刪除,直至處理完實(shí)體變更清單中的刪除清單。在處理完刪除清單之后,參考圖3B,開始處理新增清單,讀取新增清單中下一條待新增的實(shí)體,讀取待新增實(shí)體的新版本實(shí)體名稱NewEnt,在ERD中查找實(shí)體NewEnt,如果未查找到實(shí)體NewEnt,在ERD中新增實(shí)體NewEnt,并寫入該新增實(shí)體NewEnt的基本信息,并從實(shí)體編號sheet中申請一個(gè)編號newid,該newid是現(xiàn)有編號+1,然后更新實(shí)體編號sheet,之后根據(jù)新增實(shí)體NewEnt所屬子主題域,添加視圖(Drawing_ob ject_Entity)到ERWIN相應(yīng)的Sub ject_Area,至此成功地新增了實(shí)體,可以輸出導(dǎo)入結(jié)果:新增實(shí)體成功,如果在ERD中查找到了實(shí)體NewEnt,也就是說,新增實(shí)體NewEnt并不算是新增的,是在ERD中已存在的,此時(shí)可以輸出導(dǎo)入結(jié)果:要新增的新實(shí)體名在ERWIN中已存在,請核對后再導(dǎo)入。導(dǎo)入結(jié)果:新增實(shí)體成功,或者,要新增的新實(shí)體名在ERWIN中已存在,請核對后再導(dǎo)入,在導(dǎo)入結(jié)果輸出之后,返回至詢問實(shí)體的新增清單是否處理完畢,若未處理完畢,則返回讀取待新增的實(shí)體,繼續(xù)處理,直至新增清單中所有的待新增實(shí)體都已處理完畢。在處理完新增清單之后,參見圖3C,開始處理更新清單,首先讀取更新清單中下一條待更新的實(shí)體,獲取該待更新實(shí)體的舊版本實(shí)體名稱OldEnt,在ERD中查找實(shí)體OldEnt,若查找到實(shí)體OldEnt,是在ERD中,用實(shí)體變更清單中更新清單的新版信息更新實(shí)體OldEnt的舊版信息,完成實(shí)體更新,輸出導(dǎo)入結(jié)果:更新實(shí)體成功。如果在ERD中沒有查找到實(shí)體OldEnt,也就是說,要更新的實(shí)體OldEnt不存在,無法進(jìn)行更新,那么可輸出導(dǎo)入結(jié)果:要更新的舊實(shí)體名在ERWIN中找不到,請核對后再導(dǎo)入。在輸出導(dǎo)入結(jié)果后,無論是成功導(dǎo)入,還是沒有成功導(dǎo)入,都會(huì)返回至詢問實(shí)體變更清單中的更新清單。在實(shí)體變更清單中的刪除清單、新增清單、更新清單依次處理完畢后,可以得到更新后的ERD。
[0029] 在實(shí)體變更清單導(dǎo)入舊版本ERD之后,可以開始屬性變更清單的導(dǎo)入。對于屬性變更清單,同樣也是先處理刪除清單、再處理新增清單、最后處理更新清單。然而,對于屬性變更清單,因?yàn)閷傩灾g有相互引用的關(guān)系,因而在處理屬性變更清單之前,要對屬性變更清單中新增屬性的處理順序進(jìn)行調(diào)整,對于新增屬性第一屬性attl,如果引用了新增屬性第二屬性att2,則第二屬性att2優(yōu)先于第一屬性att2處理。在對應(yīng)的屬性變更清單處理之前,通過屬性變更清單的預(yù)處理來解決上述問題,這樣的預(yù)處理為:根據(jù)屬性變更清單中屬性的引用關(guān)系對新增清單中的新增屬性做拓?fù)渑判颍员惚WC被引用的屬性優(yōu)先于引用屬性處理。然而,在一些情形下,考慮到實(shí)體變更清單已經(jīng)導(dǎo)入,某屬性所屬實(shí)體的名稱會(huì)發(fā)生變化,這樣會(huì)導(dǎo)致處理屬性變更清單的過程中該屬性所屬的舊實(shí)體名稱找不到,在這樣的情況下,對屬性變更清單的預(yù)處理還可以包括:在對屬性變更清單中的新增清單進(jìn)行拓?fù)渑判蛑螅瑢τ趯傩宰兏鍐沃袆h除清單的待刪除屬性,在實(shí)體變更清單中查詢該待刪除屬性所屬的舊版本實(shí)體的名稱是否已修改,若已修改,則用在實(shí)體變更清單中修改的實(shí)體名稱替換該待刪除屬性所述的舊版本實(shí)體的名稱。這樣在待刪除屬性所屬舊版本實(shí)體的名稱已經(jīng)修改的情形下,通過對變更清單的預(yù)處理,可以通過查詢實(shí)體變更清單找到已修改的實(shí)體名稱來替換,就避免了舊實(shí)體名稱找不到的情形,提高了屬性更新的質(zhì)量。對于屬性變更清單中更新清單的待更新屬性,可以將該待更新屬性所屬的新版本實(shí)體名稱替換該待更新屬性所屬的舊版本實(shí)體名稱,從而避免在實(shí)體改名的情形下,導(dǎo)致處理屬性變更清單的過程中舊實(shí)體名稱找不到的情形。在一些場景下,還會(huì)發(fā)生屬性名稱改變,因?yàn)槿粝忍幚硇略鰧傩栽偬幚砀聦傩缘脑?,?huì)導(dǎo)致部分引用屬性找不到,本發(fā)明實(shí)施方式通過對屬性變更清單的下述預(yù)處理來解決上述部分引用屬性找不到的問題:在對更新清單的實(shí)體名稱處理之后,對于屬性變更清單中新增清單的待新增屬性,在該屬性變更清單中更新清單中查找該待新增屬性所引用的屬性的名稱是否已修改,若已修改,則用屬性變更清單中更新清單中的舊版本屬性名稱替換該待新增屬性所引用的屬性的名稱。
[0030]下面參考圖4,具體說明屬性變更清單的導(dǎo)入。參考圖4A,首先,打開ERD,打開屬性變更清單。根據(jù)屬性變更清單中屬性之間的引用關(guān)系對新增屬性做拓?fù)渑判?,以便保證被引用的屬性總是優(yōu)先于引用的處理處理。對每一行刪除的屬性(該屬性對應(yīng)的行中包括該屬性所屬實(shí)體的舊版本實(shí)體名稱、新版本實(shí)體名稱、以及引用屬性等信息),在實(shí)體變更清單中查找該待刪除的屬性所屬實(shí)體是否已改名,如果發(fā)現(xiàn)該待刪除的屬性所屬實(shí)體已經(jīng)改名,則用在實(shí)體變更清單中查找到的已經(jīng)改過的實(shí)體名稱去替換屬性變更清單中該待刪除屬性所屬實(shí)體的舊版本實(shí)體名稱。然后,對每一行更新的屬性(該待更新屬性的行中包括該屬性的舊版本實(shí)體名稱、新版本實(shí)體名稱、以及引用屬性等信息),用該行的新版本實(shí)體名稱來替換舊版本實(shí)體名稱。然后,對每一行新增的屬性,在屬性變更清單中的更新清單中查找該新增屬性所引用的屬性為關(guān)鍵字,在屬性更新清單中查找該新增屬性所引用的屬性是否已修改/已改名,若已修改/已改名,則用屬性更新清單中的舊版本屬性名稱替換該待新增屬性所引用的屬性的名稱。然后,從屬性變更清單中讀取下一條待刪除的屬性,獲取該待刪除屬性所屬的舊版本實(shí)體名稱OldEnt和屬性名稱OldAtt,在ERD中查找實(shí)體OldEnt,若未查找到實(shí)體OldEnt,則可輸出導(dǎo)入結(jié)果:要?jiǎng)h除的舊實(shí)體名在ERWIN中找不到,請核對后再導(dǎo)入。若找到實(shí)體OldEnt,在進(jìn)一步確認(rèn)ERD中的實(shí)體OldEnt是否可以找到屬性O(shè)ldAtt,若找到實(shí)體OldEnt對應(yīng)的屬性O(shè)ldAtt,在在ERD的實(shí)體OldEnt中刪除屬性O(shè)ldAtt,那么可輸出導(dǎo)入結(jié)果:刪除屬性成功,若未在實(shí)體OldEnt中查找到對應(yīng)的屬性O(shè)ldAtt,則可輸出導(dǎo)入結(jié)果:要?jiǎng)h除的舊屬性名在ERWIN中找不到,請核對后再導(dǎo)入。無論輸出的導(dǎo)入結(jié)果如何,都會(huì)返回至屬性刪除清單是否處理完成的步驟,若未處理完,則會(huì)返回至讀取下一條待刪除的屬性的步驟。若屬性刪除清單處理完畢,則可以開始處理新增清單,參考圖4B,首先讀取下一條待新增的屬性,獲取該待新增屬性所屬的新版本實(shí)體NewEnt和屬性名稱NewAtt,引用實(shí)體RefEnt和引用屬性RefAtt。在ERD中查找實(shí)體NewEnt,若未找到實(shí)體NewEnt,貝U可輸出導(dǎo)入結(jié)果:要新增的屬性所屬實(shí)體在ERWIN中找不至1J,請核對后再導(dǎo)入,若查找到實(shí)體NewEnt,則進(jìn)一步在ERD的實(shí)體NewEnt是否可找到屬性NewAtt,若找到屬性NewAtt,則可輸出導(dǎo)入結(jié)果:要新增的屬性在ERWIN已存在,本次只更新屬性的定義,若未找到屬性NewAtt,則在ERD的實(shí)體NewEnt中新增屬性NewAtt,根據(jù)變更清單中的信息,在ERD中寫入NewAtt的基本信息,在輸出導(dǎo)入結(jié)果“要新增的屬性在ERffIN已存在,本次只更新屬性的定義”之后,也需要根據(jù)變更清單,在ERD中寫入NewAtt的基本信息。在寫入NewAtt基本信息之后,確定在ERD中是否查找到引用實(shí)體RefEnt,若未查找到引用實(shí)體,則可輸出導(dǎo)入結(jié)果:引用實(shí)體名在導(dǎo)入ERWIN中不存在,請核對后再導(dǎo)入。若在ERD中查找到引用實(shí)體,則進(jìn)一步在實(shí)體RefEnt中查找引用屬性RefAtt,若未超找到引用屬性,則可輸出導(dǎo)入結(jié)果:引用屬性名在導(dǎo)入ERWIN中不存在,請核對后再導(dǎo)入。若在弓I用實(shí)體RefEnt中找到引用屬性RefAtt,則在ERD的屬性NewAtt寫入其引用屬性RefAtt,然后在屬性編號sheet中申請一個(gè)編號newid,該newid為現(xiàn)有最大編號+1,在ERD的屬性NewAtt中寫入屬性編號newid,更新屬性編號sheet,至此可輸出導(dǎo)入結(jié)果:新增屬性成功。然后,可詢問屬性新增清單是否處理完,若未處理完畢,則可返回讀取下一條待新增的屬性,若處理完畢,則可以開始更新清單的處理。參考圖4C,首先,讀取下一條待更新的屬性,獲取該待更新屬性所屬的舊版本實(shí)體名稱OldEnt和屬性名稱OldAtt,新版本引用實(shí)體RefEnt和新版本引用屬性RefAtt,在ERD中查找實(shí)體OldEnt,若未找到,則輸出導(dǎo)入結(jié)果:要更新的舊實(shí)體名在ERWIN中找不到,請核對后再導(dǎo)入,若在ERD中查找到實(shí)體OldEnt,則在ERD的實(shí)體OldEnt中查找舊版本屬性O(shè)ldAtt,若未查找到舊版本屬性O(shè)ldAtt,則可以輸出導(dǎo)入結(jié)果:要更新的舊屬性在ERWIN中找不到,請核對后再導(dǎo)入,若查找到舊版本屬性,則在ERD中,用變更清單的新版本屬性信息更新OldAtt的舊版信息,然后在ERD中查找引用實(shí)體RefEnt,若未查找到引用實(shí)體,則輸出導(dǎo)入結(jié)果:引用實(shí)體名在導(dǎo)入ERWIN中不存在,請核對后再導(dǎo)入。若查找到引用實(shí)體RefEnt,在ERD的實(shí)體RefEnt中查找屬性RefAtt,若未查找到引用屬性RefAtt,則可輸出導(dǎo)入結(jié)果:引用屬性名在導(dǎo)入ERWIN中不存在,請核對后再導(dǎo)入。若查找到屬性RefAtt,則在ERD的屬性NewAtt寫入其引用的屬性RefAtt,至此可輸出導(dǎo)入結(jié)果:更新屬性成功,然后可詢問屬性變更清單中的更新清單是否處理完畢,若未處理完畢,可返回至讀取下一條待更新的屬性,繼續(xù)處理,若處理完畢,則可輸出變更清單導(dǎo)入后的ERD版本。
[0031]在實(shí)體變更清單、屬性變更清單導(dǎo)入之后,導(dǎo)入關(guān)系變更清單。為了處理同一名稱的關(guān)系先刪除后新增的情形,對于關(guān)系變更清單的導(dǎo)入,同樣采用先處理刪除清單,再處理新增清單,最后處理更新清單的順序。在ERWIN中,實(shí)體之間的關(guān)系具體可分為繼承關(guān)系和引用關(guān)系,其主要區(qū)別在于繼承關(guān)系在父實(shí)體和子實(shí)體之間多了一個(gè)與父實(shí)體同名的“子類型符號(Subtype_Symbol)”,父實(shí)體是通過子類型符號與所有的子實(shí)體之間建立關(guān)系,而引用關(guān)系是在父實(shí)體和子實(shí)體之間直接建立關(guān)系。因此,在處理關(guān)系時(shí),要區(qū)分處理繼承關(guān)系和引用關(guān)系。ERWIN在新增一個(gè)關(guān)系時(shí),會(huì)自動(dòng)把父實(shí)體的主鍵增加到子實(shí)體的一個(gè)同名屬性作為外鍵,但在處理關(guān)系變更清單時(shí)屬性變更清單已經(jīng)處理過了,在子實(shí)體的外鍵與系統(tǒng)自動(dòng)新增的外鍵名稱不同的情形下,就會(huì)多出一個(gè)屬性,本發(fā)明的實(shí)施方式解決上述問題的方法為:在新增關(guān)系之前,先遍歷該新增關(guān)系的子實(shí)體的所有屬性,取得子實(shí)體的屬性中父屬性(引用屬性)是父實(shí)體的主鍵的序列作為第一屬性的列表,在新增關(guān)系建立之后,取得子實(shí)體中自動(dòng)新建的外鍵序列作為第二屬性的列表,然后比對第一屬性的列表和第二屬性的列表,對于兩列表中父屬性相同但屬性名稱不同的第一屬性和第二屬性,用第一屬性的名稱、UDP目的、定義、范圍、范圍之外、屬性編號等基礎(chǔ)信息來覆蓋第二屬性,然后刪除第一屬性即可。對于關(guān)系的修改,因?yàn)槔^承關(guān)系不存在修改的情形,所以只需要考慮引用關(guān)系的修改,對引用關(guān)系可能的修改包括類型(“identitying”, “non-1dentifying”, “many to many”),是否為空(No nulls, Nulls Allowed),關(guān)系基數(shù)(“Zero, one ormore,,,“one or more,,,“zero or one,,,,,Exactly,,)。
[0032]下面參考圖5,對關(guān)系變更清單的導(dǎo)入進(jìn)行具體說明。參考圖5A,首先,打開ERD,打開關(guān)系變更清單,從關(guān)系變更清單中讀取下一條待刪除的關(guān)系R1,獲取關(guān)系Rl的父實(shí)體OldParEnt和子實(shí)體OldChaEnt,以及Rl的名稱OldRel,在ERD中查找父實(shí)體OldParEnt,若未查找到父實(shí)體,則可輸出導(dǎo)入結(jié)果:要?jiǎng)h除的關(guān)系的父實(shí)體在導(dǎo)入ERWIN中不存在,請核對后再導(dǎo)入。若在ERD中查找到父實(shí)體,則ERD中查找子實(shí)體OldChaEnt,若未查找到子實(shí)體,則輸出導(dǎo)入結(jié)果:要?jiǎng)h除關(guān)系的子實(shí)體在導(dǎo)入ERWIN中不存在,請核對后再導(dǎo)入。若查找到子實(shí)體,則判斷關(guān)系Rl是繼承關(guān)系,還是引用關(guān)系,若是引用關(guān)系,在遍歷ERD中所有的關(guān)系,查找一個(gè)關(guān)系R4的父實(shí)體是OldParEnt,子實(shí)體是OldChdEnt,名稱為OldRel,然后確認(rèn)關(guān)系R4是否存在,若不存在,則可輸出導(dǎo)入結(jié)果:要?jiǎng)h除的引用關(guān)系在導(dǎo)入ERWIN中不存在,請核對后再導(dǎo)入,若R4存在,則在ERD中刪除關(guān)系R4,輸出導(dǎo)出結(jié)果:刪除引用關(guān)系成功。若判斷關(guān)系Rl為繼承關(guān)系,則在ERD中是否找到與實(shí)體OldParEnt同名稱的子類型符號OldParSym,若未找到子類型符號,則可輸出導(dǎo)入結(jié)果:要?jiǎng)h除繼承關(guān)系的子類型符號在導(dǎo)入ERWIN中不存在,請核對后再導(dǎo)入。若找到子類型符號,在遍歷ERD中所有的關(guān)系,找到一個(gè)關(guān)系R2的父實(shí)體是OldParEnt,子實(shí)體是OldParSym,遍歷ERD中所有的關(guān)系,查找是否存在一個(gè)關(guān)系R3的父實(shí)體是OldParSym,子實(shí)體是OldChdEnt,若未查找到這樣的關(guān)系R3,則可輸出導(dǎo)入結(jié)果:要?jiǎng)h除的繼承子關(guān)系在ERWIN中不存在,請核對后再導(dǎo)入,若查找到這樣的關(guān)系R3,則在ERD中刪除關(guān)系R3,如此時(shí)OldParSym下已沒有關(guān)系,則同時(shí)刪除R2和OldParSym,則可輸出導(dǎo)出結(jié)果:刪除繼承關(guān)系成功。然后,詢問關(guān)系刪除清單是否處理完畢,若未處理完畢,則可以返回讀取下一條待刪除的關(guān)系,繼續(xù)處理,若處理完畢,則可以開始處理新增清單。在此需要說明的是,流程步驟中所描述的關(guān)系R1、R2、R3、R4等,僅為了描述方便,并不具有特定意義,也不應(yīng)理解為對本發(fā)明實(shí)施方式的限制。參見圖5B,讀取下一條待新增的關(guān)系Rl (此處的關(guān)系Rl與刪除清單中涉及的Rl并不相同,僅是為描述方便,對關(guān)系的標(biāo)識),獲取關(guān)系Rl的父實(shí)體NewParEnt和子實(shí)體NewChdEnt,然后在ERD中查找父實(shí)體NewParEnt,若未查找到父實(shí)體,則可輸出導(dǎo)入結(jié)果:要新增關(guān)系的父實(shí)體在導(dǎo)入ERWIN中不存在,請核對后再導(dǎo)入。若查找到父實(shí)體,則ERD中查找子實(shí)體NewChdEnt,若未查找到子實(shí)體,則可輸出導(dǎo)入結(jié)果:要新增關(guān)系的子實(shí)體在導(dǎo)入ERWIN中不存在,請核對后再導(dǎo)入。若查找到子實(shí)體,則可對子實(shí)體的所有屬性遍歷,是否找到父屬性是父實(shí)體的主鍵的屬性列表AttrListl,若未查找到這樣的屬性列表,則可輸出導(dǎo)入結(jié)果:要新增關(guān)系的子實(shí)體外鍵屬性在ERWIN中不存在,請先處理屬性變更清單后核對后再導(dǎo)入關(guān)系。若查找至IJ這樣的屬性列表,則判斷Rl是繼承關(guān)系還是引用關(guān)系,若是引用關(guān)系,則遍歷ERD中所有的關(guān)系,查找是否存在一個(gè)關(guān)系R4的父實(shí)體是NewParEnt,子實(shí)體是NewChdEnt,若這樣的R4存在,則可輸出導(dǎo)入結(jié)果:要新增的引用關(guān)系在導(dǎo)入ERWIN中已存在,請核對后再導(dǎo)入。若這樣的R4不存在,可在ERD中新建一個(gè)引用關(guān)系R4,R4的父實(shí)體是NewParEnt,子實(shí)體是NewChdEnt,然后根據(jù)NewChdEnt所屬子主題域,添加新增關(guān)系R4的視圖(Drawing_object_Relationship)到 ERWIN相應(yīng)的 Sub ject_Area,將 NewChdEnt 與 NewParEnt 所屬子主題域做比較,若不同,則把NewPar Ent加到NewChdEnt所屬子主題域的視圖中,對子實(shí)體NewChdEnt中自動(dòng)新建的外鍵序列AttrList2,與屬性列表AttrListl進(jìn)行比對,看是否找到父屬性相同,但屬性名稱不同的Attrl和Attr2,若找到,則用Attrl的基礎(chǔ)信息來覆蓋Attr2,然后刪除Attrl。如果判斷關(guān)系Rl為繼承關(guān)系,則在ERD中是否找到與實(shí)體NewParEnt同名的子類型符號NewParSym,若未查找到,貝U在ERD中新建一個(gè)子類型符號NewParSym,名稱同NewParEnt,然后在ERD中新建一個(gè)“can be a”關(guān)系R2, R2的父實(shí)體是NewParEnt,子實(shí)體是NewParSym。若找到與實(shí)體NewPatEnt同名的子類型符號NewParSym,則遍歷ERD中所有的關(guān)系,找到一個(gè)關(guān)系R2的父實(shí)體是NewParEnt,子實(shí)體是NewParSym,然后遍歷ERD中所有的關(guān)系,查找是否存在一個(gè)關(guān)系R3的父實(shí)體是NewParSym,子實(shí)體是NewChdEnt,若這樣的關(guān)系R3存在,則可輸出導(dǎo)入結(jié)果:要新增的繼承關(guān)系在導(dǎo)入ERWIN中已存在,請核對后再導(dǎo)入。若這樣的關(guān)系R3不存在,則在ERD中新建一個(gè)“is a”的關(guān)系R3,R3的父實(shí)體是NewParSym,子實(shí)體是NewChdEnt,根據(jù)NewChdEnt所屬子主題域,添加關(guān)系R3的視圖(Drawing_ob ject_subtype_SymboI)到 ERWIN 相應(yīng)的 Sub ject_Area,之后將 NewChdEnt 與NewParEnt所屬子主題域做比較,若不同,則把NewParEnt加到NewChdEnt所屬子主題域的視圖中,對子實(shí)體NewChdEnt中自動(dòng)新建的外鍵序列AttrList2,與屬性列表AttrListl進(jìn)行比對,看是否找到父屬性相同,但屬性名稱不同的Attrl和Attr2,若找到,則用Attrl的基本信息來覆蓋Attr2,然后刪除Attrl。然后,詢問關(guān)系變更清單中新增清單是否處理完畢,若未處理完畢,則返回讀取下一條待新增的關(guān)系,若處理完畢,則開始處理更新清單。參考圖5C,首先,從關(guān)系變更清單中讀取下一條待更新的關(guān)系R1,判斷Rl是否為引用關(guān)系,若不是引用關(guān)系,也就是說,關(guān)系Rl為繼承關(guān)系,則可輸出導(dǎo)入結(jié)果:繼承關(guān)系無需修改,請核對后再導(dǎo)入。若關(guān)系Rl為引用關(guān)系,讀取關(guān)系Rl的舊實(shí)體OldParEnt和舊子實(shí)體OldChdEnt,以及Rl的舊版本名稱OldRel。在ERD中是否找到父實(shí)體OldParEnt,若未找到父實(shí)體OldParEnt,則可輸出導(dǎo)入結(jié)果:要更新關(guān)系的父實(shí)體在導(dǎo)入ERWIN中不存在,請核對后再導(dǎo)入。若找到父實(shí)體OldParEnt,則在ERD中查找子實(shí)體OldChdEnt,若未找到子實(shí)體OldChdEnt,則可輸出導(dǎo)入結(jié)果:要更新關(guān)系的子實(shí)體在導(dǎo)入ERWIN中不存在,請核對后再導(dǎo)入。若查找到子實(shí)體OldChdEnt,則遍歷ERD中所有的關(guān)系,查找一個(gè)關(guān)系R9的父實(shí)體是OldParEnt,子實(shí)體是OldChdEnt,名稱為OldRel,若這樣的關(guān)系R9不存在,則可輸出導(dǎo)入結(jié)果:要更新的引用關(guān)系在導(dǎo)入ERWIN中不存在,請核對后再導(dǎo)入。若這樣的關(guān)系R9存在,則在ERD中,用變更清單中的新版信息更新關(guān)系R9中的舊版信息,至此可輸出導(dǎo)入結(jié)果:更新關(guān)系成功。然后可以詢問,更新清單是否處理完畢,若未處理完畢,則可以返回讀取下一條待更新的關(guān)系,繼續(xù)處理更新清單。若處理完畢,則可輸出關(guān)系變更清單導(dǎo)入后的ERD版本。
[0033]參見圖6,圖示了根據(jù)本發(fā)明一種實(shí)施方式的ERWIN模型軟件更新的裝置,該ERffIN模型軟件更新的裝置600具體可包括:
[0034]第一處理模塊601,用于將舊版本ERD的副本分別保存到多個(gè)本地設(shè)備,在各本地設(shè)備上修改所述副本得到各分組的臨時(shí)修改版ERD ;
[0035]比對模塊602,用于利用ERWIN的應(yīng)用程序編程接口 API獲取各本地設(shè)備上舊版本ERD和對應(yīng)的臨時(shí)修改版ERD的內(nèi)置對象的關(guān)聯(lián)信息,并將各自所獲取的內(nèi)置對象的關(guān)聯(lián)信息進(jìn)行比對,得到各分組內(nèi)置對象的變更清單,其中所述內(nèi)置對象包括:主題域、實(shí)體、屬性和關(guān)系;
[0036]更新模塊603,用于將各分組的變更清單通過ERWIN的應(yīng)用程序編程接口依次導(dǎo)入舊版本ERD進(jìn)行更新。
[0037]在本發(fā)明的一種實(shí)施案例中,ERffIN模型軟件更新的裝置可應(yīng)用的ERD模型文件屬于企業(yè)級C模型,可涉及上百個(gè)主題域、上千個(gè)實(shí)體、上萬個(gè)屬性、幾千個(gè)域。對這樣大規(guī)模的ERD模型文件,可以按照主題域進(jìn)行分組,分組的數(shù)目可以根據(jù)應(yīng)用需要設(shè)置,例如,可分為2、3、4、5、6、7、8、9、10或更多個(gè)分組,每個(gè)分組各自獨(dú)立維護(hù)企業(yè)級C模型的一部分內(nèi)容,這一部分內(nèi)容是以舊版本ERD的副本的形式保存在本地設(shè)備上。換而言之,各本地設(shè)備上均保存的是舊版本ERD的副本,但實(shí)際維護(hù)的是ERD的一部分內(nèi)容。第一處理模塊將舊版本ERD的副本分別保存到本地設(shè)備,在此我們將保存到本地設(shè)備的ERD稱為本地舊版本ERD。在舊版本ERD的副本保存到本地設(shè)備后,可以根據(jù)對ERD的數(shù)據(jù)建模需求對本地舊版本ERD進(jìn)行修改,得到本地臨時(shí)修改版ERD。
[0038]本發(fā)明的裝置實(shí)施方式可在ERWIN7.3版本、VBA語言、EXCEL (2003版、2007版、2010版EXCEL均可以實(shí)施)的環(huán)境下進(jìn)行,其中會(huì)涉及到ERWIN的術(shù)語,具體而言,包括域、主題域、實(shí)體、屬性、關(guān)系等,有關(guān)這些屬性的說明可參見方法實(shí)施方式中的說明。
[0039]本發(fā)明實(shí)施方式中的ERWIN的內(nèi)置對象可包括主題域、實(shí)體、屬性和關(guān)系,比對模塊在本地設(shè)備上利用ERWIN的應(yīng)用程序編程接口(Application Programming Interface,API)可以讀取ERWIN的內(nèi)置對象(包括臨時(shí)保存在本地設(shè)備的舊版本ERD,和本地設(shè)備上臨時(shí)修改得到的臨時(shí)修改版ERD)的關(guān)聯(lián)信息,其中,所述關(guān)聯(lián)信息可以是內(nèi)置對象的基本信息和上下文信息,以內(nèi)置對象中的屬性為例,關(guān)聯(lián)信息可以是屬性的基本信息(包括屬性的id、名稱、目的、定義、范圍、域組、域等),以及屬性的上下文信息(包括屬性所屬實(shí)體的信息,和屬性之間主外鍵關(guān)系的信息)。例如,在一些實(shí)施方式中,比對模塊在一個(gè)本地設(shè)備上通過API獲取舊版本ERD與該分組的臨時(shí)修改版ERD的屬性的比對可以按照圖2所示的步驟進(jìn)行。
[0040]在各個(gè)本地設(shè)備上各分組的獲取到新舊版本ERD的主題域、實(shí)體、屬性、關(guān)系的變更清單之后,更新模塊將按照主題域、實(shí)體、屬性、關(guān)系的順序依次將主題域變更清單、實(shí)體變更清單、屬性變更清單、關(guān)系變更清單導(dǎo)入本地設(shè)備上舊版本ERD的分組進(jìn)行更新。更新模塊對上述內(nèi)置對象的變更清單的導(dǎo)入是過對ERWIN的內(nèi)置對象主題域、實(shí)體、屬性、關(guān)系的寫入操作實(shí)現(xiàn)。ERWIN的內(nèi)置對象必須按照主題域、實(shí)體、屬性、關(guān)系的順序依次將它們的變更清單導(dǎo)入,是因?yàn)檫@些內(nèi)置對象之間存在的相互引用的關(guān)系,如果不按照上述順序依次導(dǎo)入會(huì)導(dǎo)致部分內(nèi)置對象更新發(fā)生混亂,無法實(shí)現(xiàn)ERD更新。在一些應(yīng)用場景下,可能會(huì)出現(xiàn)誤操作,可能將某個(gè)內(nèi)置對象誤刪除,又希望將其增加的情形,這樣的情形下,本發(fā)明的更新模塊通過先處理刪除清單,再處理新增清單,最后處理更新清單的方式解決。以實(shí)體變更清單的導(dǎo)入為例,參考圖3,說明了更新模塊中實(shí)體變更清單的導(dǎo)入處理過程,更新模塊的處理具體可參見上述方法實(shí)施方式中對實(shí)體變更清單的處理過程。
[0041]更新模塊在實(shí)體變更清單導(dǎo)入舊版本ERD之后,可以開始屬性變更清單的導(dǎo)入。對于屬性變更清單,更新模塊同樣也是先處理刪除清單、再處理新增清單、最后處理更新清單。然而,對于屬性變更清單,因?yàn)閷傩灾g有相互引用的關(guān)系,因而在處理屬性變更清單之前,更新模塊要對屬性變更清單中新增屬性的處理順序進(jìn)行調(diào)整,對于新增屬性第一屬性attl,如果引用了新增屬性第二屬性att2,則第二屬性att2優(yōu)先于第一屬性att2處理。在對應(yīng)的屬性變更清單處理之前,通過屬性變更清單的預(yù)處理來解決上述問題,這樣的預(yù)處理為:根據(jù)屬性變更清單中屬性的引用關(guān)系對新增清單中的新增屬性做拓?fù)渑判?,以便保證被引用的屬性優(yōu)先于引用屬性處理。然而,在一些情形下,考慮到實(shí)體變更清單已經(jīng)導(dǎo)入,某屬性所屬實(shí)體的名稱會(huì)發(fā)生變化,這樣會(huì)導(dǎo)致處理屬性變更清單的過程中該屬性所屬的舊實(shí)體名稱找不到,在這樣的情況下,更新模塊對屬性變更清單的預(yù)處理還可以包括:在對屬性變更清單中的新增清單進(jìn)行拓?fù)渑判蛑螅瑢τ趯傩宰兏鍐沃袆h除清單的待刪除屬性,在實(shí)體變更清單中查詢該待刪除屬性所屬的舊版本實(shí)體的名稱是否已修改,若已修改,則用在實(shí)體變更清單中修改的實(shí)體名稱替換該待刪除屬性所述的舊版本實(shí)體的名稱。這樣在待刪除屬性所屬舊版本實(shí)體的名稱已經(jīng)修改的情形下,通過對變更清單的預(yù)處理,可以通過查詢實(shí)體變更清單找到已修改的實(shí)體名稱來替換,就避免了舊實(shí)體名稱找不到的情形,提高了屬性更新的質(zhì)量。對于屬性變更清單中更新清單的待更新屬性,可以將該待更新屬性所屬的新版本實(shí)體名稱替換該待更新屬性所屬的舊版本實(shí)體名稱,從而避免在實(shí)體改名的情形下,導(dǎo)致處理屬性變更清單的過程中舊實(shí)體名稱找不到的情形。在一些場景下,還會(huì)發(fā)生屬性名稱改變,因?yàn)槿粝忍幚硇略鰧傩栽偬幚砀聦傩缘脑?,?huì)導(dǎo)致部分引用屬性找不到,本發(fā)明實(shí)施方式通過對屬性變更清單的下述預(yù)處理來解決上述部分引用屬性找不到的問題:在對更新清單的實(shí)體名稱處理之后,對于屬性變更清單中新增清單的待新增屬性,在該屬性變更清單中更新清單中查找該待新增屬性所引用的屬性的名稱是否已修改,若已修改,則用屬性變更清單中更新清單中的舊版本屬性名稱替換該待新增屬性所引用的屬性的名稱。參考圖4,具體說明更新模塊對屬性變更清單的導(dǎo)入,具體請參見上面對于圖4的描述。
[0042]在更新模塊的實(shí)體變更清單、屬性變更清單導(dǎo)入之后,導(dǎo)入關(guān)系變更清單。為了處理同一名稱的關(guān)系先刪除后新增的情形,對于關(guān)系變更清單的導(dǎo)入,同樣采用先處理刪除清單,再處理新增清單,最后處理更新清單的順序。在ERWIN中,實(shí)體之間的關(guān)系具體可分為繼承關(guān)系和引用關(guān)系,其主要區(qū)別在于繼承關(guān)系在父實(shí)體和子實(shí)體之間多了一個(gè)與父實(shí)體同名的“子類型符號(Subtype_Symbol)”,父實(shí)體是通過子類型符號與所有的子實(shí)體之間建立關(guān)系,而引用關(guān)系是在父實(shí)體和子實(shí)體之間直接建立關(guān)系。因此,在處理關(guān)系時(shí),更新模塊要區(qū)分處理繼承關(guān)系和引用關(guān)系。ERWIN在新增一個(gè)關(guān)系時(shí),會(huì)自動(dòng)把父實(shí)體的主鍵增加到子實(shí)體的一個(gè)同名屬性作為外鍵,但在處理關(guān)系變更清單時(shí)屬性變更清單已經(jīng)處理過了,在子實(shí)體的外鍵與系統(tǒng)自動(dòng)新增的外鍵名稱不同的情形下,就會(huì)多出一個(gè)屬性,本發(fā)明的更新模塊解決上述問題的方法為:在新增關(guān)系之前,先遍歷該新增關(guān)系的子實(shí)體的所有屬性,取得子實(shí)體的屬性中父屬性是父實(shí)體的主鍵的序列作為第一屬性的列表,在增加了所述待新增關(guān)系之后,取得子實(shí)體中自動(dòng)新建的外鍵序列作為第二屬性的列表,然后比對第一屬性的列表和第二屬性的列表,對于兩列表中父屬性相同但屬性名稱不同的第一屬性和第二屬性,用第一屬性attrl的名稱、UDP目的、定義、范圍、范圍之外、屬性編號來覆蓋第二屬性attr2,然后刪除第一屬性attrl即可。對于關(guān)系的修改,因?yàn)槔^承關(guān)系不存在修改的情形,所以只需要考慮引用關(guān)系的修改,對引用關(guān)系可能的修改包括類型(“identitying”,“non-1dentifying”, “many to many”),是否為空(No nulls, Nulls Allowed),關(guān)系基數(shù)(“Zero, one or more,,,“one or more,,,“zero or one,,,’’Exactly,,)。參考圖 5,具體說明更新模塊對關(guān)系變更清單的導(dǎo)入,具體請參見上面對圖5的描述。
[0043]實(shí)施本發(fā)明實(shí)施方式提供的ERWIN模型軟件更新的方法和裝置,在大數(shù)據(jù)量更新的場景下,實(shí)現(xiàn)了多個(gè)ERD文件的并行更新處理,并且根據(jù)ERD文件更新所固有的屬性特征設(shè)置相應(yīng)的內(nèi)置對象的變更清單的處理順序,還根據(jù)內(nèi)置對象的各自的關(guān)聯(lián)特征進(jìn)行對應(yīng)的更新處理步驟,在提高了數(shù)據(jù)更新處理效率的同時(shí),還顯著改善了更新處理的準(zhǔn)確度。
[0044]通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā)明可借助軟件結(jié)合硬件平臺(tái)的方式來實(shí)現(xiàn),當(dāng)然也可以全部通過硬件來實(shí)施?;谶@樣的理解,本發(fā)明的技術(shù)方案對【背景技術(shù)】做出貢獻(xiàn)的全部或者部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品可以存儲(chǔ)在存儲(chǔ)介質(zhì)中,如R0M/RAM、磁碟、光盤等,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例或者實(shí)施例的某些部分所述的方法。
[0045]以上所揭露的僅為本發(fā)明的一種較佳實(shí)施例而已,當(dāng)然不能以此來限定本發(fā)明之權(quán)利范圍,因此依本發(fā)明權(quán)利要求所作的等同變化,仍屬本發(fā)明所涵蓋的范圍。
【權(quán)利要求】
1.一種ERWIN模型軟件更新的方法,其特征在于,包括: 將舊版本ERD的副本分別保存到多個(gè)本地設(shè)備,在各本地設(shè)備上修改所述副本得到各分組的臨時(shí)修改版ERD ; 利用ERWIN的應(yīng)用程序編程接口獲取各本地設(shè)備上舊版本ERD和臨時(shí)修改版ERD的內(nèi)置對象的關(guān)聯(lián)信息,并將各自所獲取的內(nèi)置對象的關(guān)聯(lián)信息進(jìn)行比對,得到各分組內(nèi)置對象的變更清單,其中所述內(nèi)置對象包括:主題域、實(shí)體、屬性和關(guān)系; 將各分組的變更清單通過ERWIN的應(yīng)用程序編程接口依次導(dǎo)入舊版本ERD進(jìn)行更新。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,將各分組的變更清單通過ERWIN的應(yīng)用程序編程接口依次導(dǎo)入舊版本ERD進(jìn)行更新包括: 按照主題域、實(shí)體、屬性、關(guān)系的順序依次將各分組的變更清單分別導(dǎo)入所述舊版本ERD進(jìn)行更新。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述導(dǎo)入是利用ERWIN的應(yīng)用程序編程接口對主體域、實(shí)體、屬性、關(guān)系的寫入操作實(shí)現(xiàn)。
4.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述變更清單包括主題域變更清單、實(shí)體變更清單、屬性變更清單和關(guān)系變更清單,其中各變更清單包括刪除清單、新增清單和更新清單。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述主題域變更清單、實(shí)體變更清單、屬性變更清單和關(guān)系變更清單導(dǎo)入所述舊版本ERD是按照首先處理各變更清單中的刪除清單,其次處理各變更清單中的新增清單,再次處理各變更清單中的更新清單的順序依次進(jìn)行。`
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,其中,在所述屬性變更清單導(dǎo)入所述舊版本ERD過程中,對所述屬性變更清單的預(yù)處理包括: 根據(jù)屬性變更清單中屬性的引用關(guān)系對新增清單中的新增屬性做拓?fù)渑判?,以便保證被引用的屬性優(yōu)先于引用屬性處理。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,在所述屬性變更清單導(dǎo)入所述舊版本ERD過程中,對所述屬性變更清單的預(yù)處理還包括: 在所述拓?fù)渑判蚝螅瑢τ谒鰧傩宰兏鍐沃袆h除清單的待刪除屬性,在實(shí)體變更清單查詢該待刪除屬性所屬的舊版本實(shí)體的名稱是否已修改,若已修改,則用在實(shí)體變更清單中已修改的實(shí)體名稱替換該待刪除屬性所屬的舊版本實(shí)體的名稱。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于,在所述屬性變更清單導(dǎo)入所述舊版本ERD過程中,對所述屬性變更清單的預(yù)處理還包括: 在對所述屬性變更清單中刪除清單的實(shí)體名稱處理后,對于所述屬性變更清單中更新清單的待更新屬性,將該待更新屬性所屬的新版本實(shí)體名稱替換該待更新屬性所屬的舊版本實(shí)體名稱。
9.根據(jù)權(quán)利要求8所述的方法,其特征在于,在所述屬性變更清單導(dǎo)入所述舊版本ERD過程中,對所述屬性變更清單的預(yù)處理還包括: 在對所述屬性變更清單中更新清單的實(shí)體名稱處理后,對于所述屬性變更清單中新增清單的待新增屬性,在所述屬性變更清單中更新清單中查找該待新增屬性所引用的屬性的名稱是否已修改,若已修改,則用所述屬性變更清單中更新清單中的舊版本屬性名稱替換該待新增屬性所引用的屬性的名稱。
10.根據(jù)權(quán)利要求9所述的方法,其特征在于,在將所述關(guān)系變更清單導(dǎo)入所述舊版本ERD過程中,其中, 對于所述關(guān)系變更清單中新增清單的待新增關(guān)系,在增加該待新增關(guān)系之前,遍歷該待新增關(guān)系的子實(shí)體的屬性,取得所述子實(shí)體的屬性中父屬性是父實(shí)體的主鍵的序列作為第一屬性的列表, 在增加了所述待新增關(guān)系之后,取得子實(shí)體中自動(dòng)新建的外鍵序列作為第二屬性的列表,然后比對第一屬性的列表和第二屬性的列表,對于兩列表中父屬性相同但屬性名稱不同的第一屬性和第二屬性,用第一屬性的全部信息覆蓋第二屬性,并且刪除第一屬性。
11.一種ERWIN模型軟件更新的裝置,其特征在于,包括: 第一處理模塊,用于將舊版本ERD的副本分別保存到多個(gè)本地設(shè)備,在各本地設(shè)備上修改所述副本得到各分組的臨時(shí)修改版ERD ; 比對模塊,用于利用ERWIN的應(yīng)用程序編程接口 API獲取各本地設(shè)備上舊版本ERD和對應(yīng)的臨時(shí)修改版ERD的內(nèi)置對象的關(guān)聯(lián)信息,并將各自所獲取的內(nèi)置對象的關(guān)聯(lián)信息進(jìn)行比對,得到各分組內(nèi)置對象的變更清單,其中所述內(nèi)置對象包括:主題域、實(shí)體、屬性和關(guān)系; 更新模塊,用于將各分組的變更清單通過ERWIN的應(yīng)用程序編程接口依次導(dǎo)入舊版本ERD進(jìn)行更新。
12.根據(jù)權(quán)利要求11所述的裝置,其特征在于,所述更新模塊,用于按照主題域、實(shí)體、屬性、關(guān)系的順序依次將各分組的變更清單分別導(dǎo)入所述舊版本ERD進(jìn)行更新。
13.根據(jù)權(quán)利要求12所述的裝置`,其特征在于,所述更新模塊的導(dǎo)入是利用ERWIN的應(yīng)用程序編程接口對主體域、實(shí)體、屬性、關(guān)系的寫入操作實(shí)現(xiàn)。
14.根據(jù)權(quán)利要求12所述的裝置,其特征在于,所述變更清單包括主題域變更清單、實(shí)體變更清單、屬性變更清單和關(guān)系變更清單,其中各變更清單包括刪除清單、新增清單和更新清單。
15.根據(jù)權(quán)利要求14所述的裝置,其特征在于,所述更新模塊將所述主題域變更清單、實(shí)體變更清單、屬性變更清單和關(guān)系變更清單導(dǎo)入所述舊版本ERD是按照首先處理各變更清單中的刪除清單,其次處理各變更清單中的新增清單,再次處理各變更清單中的更新清單的順序依次進(jìn)行。
16.根據(jù)權(quán)利要求15所述的裝置,其特征在于,所述更新模塊,還用于在所述屬性變更清單導(dǎo)入所述舊版本ERD過程中,對所述屬性變更清單的預(yù)處理,所述預(yù)處理包括:根據(jù)屬性變更清單中屬性的引用關(guān)系對新增清單中的新增屬性做拓?fù)渑判?,以便保證被引用的屬性優(yōu)先于引用屬性處理。
17.根據(jù)權(quán)利要求16所述的裝置,其特征在于,所述更新模塊,還用于在所述屬性變更清單導(dǎo)入所述舊版本ERD過程中,對所述屬性變更清單進(jìn)行預(yù)處理,所述預(yù)處理包括:在所述拓?fù)渑判蚝螅瑢τ谒鰧傩宰兏鍐沃袆h除清單的待刪除屬性,在實(shí)體變更清單查詢該待刪除屬性所屬的舊版本實(shí)體的名稱是否已修改,若已修改,則用在實(shí)體變更清單中已修改的實(shí)體名稱替換該待刪除屬性所屬的舊版本實(shí)體的名稱。
18.根據(jù)權(quán)利要求17所述的裝置,其特征在于,所述更新模塊,還用于在所述屬性變更清單導(dǎo)入所述舊版本ERD過程中,對所述屬性變更清單進(jìn)行預(yù)處理,所述預(yù)處理包括:在對所述屬性變更清單中刪除清單的實(shí)體名稱處理后,對于所述屬性變更清單中更新清單的待更新屬性,將該待更新屬性所屬的新版本實(shí)體名稱替換該待更新屬性所屬的舊版本實(shí)體名稱。
19.根據(jù)權(quán)利要求18所述的裝置,其特征在于,所述更新模塊,還用于在所述屬性變更清單導(dǎo)入所述舊版本ERD過程中,對所述屬性變更清單進(jìn)行預(yù)處理,所述預(yù)處理包括:在對所述屬性變更清單中更新清單的實(shí)體名稱處理后,對于所述屬性變更清單中新增清單的待新增屬性,在所述屬性變更清單中更新清單中查找該待新增屬性所引用的屬性的名稱是否已修改,若已修改,則用所述屬性變更清單中更新清單中的舊版本屬性名稱替換該待新增屬性所引用的屬性的名稱。
20.根據(jù)權(quán)利要求19所述的裝置,其特征在于,所述更新模塊,還用于在將所述關(guān)系變更清單導(dǎo)入所述舊版本ERD過程中,對于所述關(guān)系變更清單中新增清單的待新增關(guān)系,在增加該待新增關(guān)系之前,遍歷該待新增關(guān)系的子實(shí)體的屬性,取得所述子實(shí)體的屬性中父屬性是父實(shí)體的主鍵的序列作為第一屬性的列表,在增加了所述待新增關(guān)系之后,取得子實(shí)體中自動(dòng)新建的外鍵序列作為第二屬性的列表,然后比對第一屬性的列表和第二屬性的列表,對于兩列表中父屬性相同但屬性名稱 不同的第一屬性和第二屬性,用第一屬性的全部信息覆蓋第二屬性,并且刪除第一屬性。
【文檔編號】G06F17/30GK103823842SQ201410025781
【公開日】2014年5月28日 申請日期:2014年1月20日 優(yōu)先權(quán)日:2014年1月20日
【發(fā)明者】程大慶, 車春雷, 張春銳, 趙亞敏, 李明, 陰斐, 田豐 申請人:中國建設(shè)銀行股份有限公司