欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

面向?qū)ο髽?biāo)識(shí)方法

文檔序號(hào):87723閱讀:751來(lái)源:國(guó)知局
專利名稱:面向?qū)ο髽?biāo)識(shí)方法
技術(shù)領(lǐng)域
本發(fā)明涉及數(shù)據(jù)庫(kù),具體而言,涉及一種面向?qū)ο髽?biāo)識(shí)方法。
背景技術(shù)
在關(guān)系數(shù)據(jù)庫(kù)理論和面向?qū)ο蠓椒ㄖ行枰褂脤?duì)象標(biāo)識(shí)技術(shù)。關(guān)系數(shù)據(jù)庫(kù)理論的三個(gè)要素是實(shí)體、實(shí)體屬性和實(shí)體之間的關(guān)系。通常地,一個(gè)實(shí)體對(duì)應(yīng)于一個(gè)表中的一條記錄,實(shí)體的一個(gè)屬性對(duì)應(yīng)于記錄中的一個(gè)字段,其中一個(gè)特定的屬性能起到唯一標(biāo)識(shí)一個(gè)實(shí)體的作用,稱為主鍵。而兩個(gè)實(shí)體之間的關(guān)系是通過(guò)一個(gè)實(shí)體的一個(gè)屬性值(成為外鍵)和另一個(gè)實(shí)體的主鍵值相等的方式來(lái)建立。
針對(duì)數(shù)據(jù)庫(kù)主鍵的設(shè)計(jì),通常采用兩種方案。
一是采用有業(yè)務(wù)含義的字段作主鍵,比如客戶的身份證號(hào),訂單的編號(hào)。這種方案針對(duì)每個(gè)表的特點(diǎn)分別不同格式和長(zhǎng)度的主鍵,因而可以節(jié)省存儲(chǔ)空間并且可以提高關(guān)聯(lián)查詢的性能,但壞處也是顯而易見(jiàn)的在系統(tǒng)的生命周期中一旦主鍵字段的規(guī)則發(fā)生變化會(huì)造成災(zāi)難性的后果,這一點(diǎn)相信有企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)的讀者都有共識(shí)。并且這種主鍵格式不一,不能體現(xiàn)為對(duì)所有對(duì)象統(tǒng)一的標(biāo)識(shí),所以不能滿足面向?qū)ο蠓椒ǖ男枰?br> 二是另外設(shè)計(jì)一個(gè)ID字段來(lái)作為主鍵,這個(gè)ID的值沒(méi)有任何含義,只要保證其取值唯一即可??梢园堰@種方案稱為“ID模式”,它解決了前一方案的問(wèn)題,目前越來(lái)越成為企業(yè)應(yīng)用開發(fā)的主流。
但是ID模式在很多情況下并不完美。以面向?qū)ο蟮挠^點(diǎn)來(lái)看,無(wú)任何含義的ID通常只在一個(gè)數(shù)據(jù)表的范疇內(nèi)進(jìn)行數(shù)據(jù)記錄的區(qū)分,而不能描述一個(gè)全局性的對(duì)象體系架構(gòu)。
另一方面,在面向?qū)ο蠓椒ㄖ?,通常?duì)計(jì)算機(jī)程序中的對(duì)象的標(biāo)識(shí)使用其地址值來(lái)實(shí)現(xiàn),而對(duì)象之間的關(guān)系也通過(guò)使用指針或引用等來(lái)體現(xiàn)。
在關(guān)系數(shù)據(jù)庫(kù)中,對(duì)象標(biāo)識(shí)和對(duì)象關(guān)系表達(dá)目前主要采用GUID(全局唯一標(biāo)識(shí),Globally Unique Identifier)技術(shù)和O/RMapping(對(duì)象-關(guān)系映射,object-relational mapping)技術(shù)。
GUID技術(shù)使用隨機(jī)生成的一個(gè)數(shù)字GUID來(lái)作為數(shù)據(jù)的主鍵,因?yàn)镚UID非常大,可以在理論上保證在系統(tǒng)中生成的各個(gè)主鍵值是唯一的。但GUID的主要缺點(diǎn)是不包含有價(jià)值的信息性,不能實(shí)現(xiàn)體現(xiàn)面向?qū)ο蟮膬?yōu)點(diǎn),并且難以實(shí)現(xiàn)有效的管理。
O/R Mapping技術(shù)是用于構(gòu)建關(guān)系數(shù)據(jù)庫(kù)和對(duì)象之間關(guān)系映射的技術(shù)。O/R Mapping技術(shù)并不考慮數(shù)據(jù)庫(kù)結(jié)構(gòu)本身的改良,而是試圖在一個(gè)已經(jīng)有的數(shù)據(jù)庫(kù)結(jié)構(gòu)上和程序開發(fā)的類和對(duì)象之間建立松散的耦合關(guān)聯(lián)。
GUID的主要缺點(diǎn)是不包含有價(jià)值的信息性,不能實(shí)現(xiàn)體現(xiàn)面向?qū)ο蟮膬?yōu)點(diǎn),并且難以實(shí)現(xiàn)有效的管理。獲取到一個(gè)GUID,并不能簡(jiǎn)單地知道它是什么類。要記錄一個(gè)全局性的所有的對(duì)象的GUID和它們所屬有類之間的對(duì)應(yīng)關(guān)系需要非常大的一張表,這事實(shí)上是不可行的。
將編程的對(duì)象和數(shù)據(jù)庫(kù)對(duì)應(yīng)起來(lái),就是基本的O/R Mapping的思想。其缺點(diǎn)是O/R Mapping技術(shù)并不考慮數(shù)據(jù)庫(kù)結(jié)構(gòu)本身的改良,而是在一個(gè)已經(jīng)有的數(shù)據(jù)庫(kù)結(jié)構(gòu)上和面向?qū)ο蟮某绦蚪Y(jié)合起來(lái),將數(shù)據(jù)庫(kù)操作的SQL語(yǔ)句轉(zhuǎn)變成了面向?qū)ο蟮恼Z(yǔ)句,主要是一種語(yǔ)法便利而不能帶來(lái)更深刻的思想變化,具體應(yīng)用效果也會(huì)受到很大的限制。如果數(shù)據(jù)庫(kù)本身沒(méi)有一種面向?qū)ο蟮奈锢斫Y(jié)構(gòu)設(shè)計(jì),那么O/R Mapping到后邊會(huì)無(wú)法實(shí)現(xiàn)有價(jià)值的東西,而且造成O/RMapping內(nèi)部結(jié)構(gòu)復(fù)雜。
另一方面,O/R Mapping是靜態(tài)的,需要在編譯前生成代碼。
在采用面向?qū)ο蠓椒ǖ拿嫦驅(qū)ο髷?shù)據(jù)庫(kù)中,對(duì)象標(biāo)識(shí)和對(duì)象關(guān)系表達(dá)是完備的,保證了對(duì)象標(biāo)識(shí)的統(tǒng)一性、全局性和多態(tài)性。而關(guān)系數(shù)據(jù)庫(kù)中則沒(méi)有對(duì)等的方法。通常地,關(guān)系數(shù)據(jù)庫(kù)設(shè)計(jì)的主鍵是面向表的,一個(gè)主鍵值在一個(gè)表的范圍內(nèi)唯一,并不在整個(gè)系統(tǒng)內(nèi)唯一。以面向?qū)ο蟮挠^點(diǎn)來(lái)看,這樣的標(biāo)識(shí)不能描述一個(gè)全局性的對(duì)象體系架構(gòu)。

發(fā)明內(nèi)容本發(fā)明旨在提供本發(fā)明提供了一種面向?qū)ο髽?biāo)識(shí)方法,用于以面向?qū)ο蠓绞綐?biāo)識(shí)數(shù)據(jù)庫(kù)中的數(shù)據(jù),數(shù)據(jù)庫(kù)包括多個(gè)包括業(yè)務(wù)信息的數(shù)據(jù),每個(gè)數(shù)據(jù)的業(yè)務(wù)信息相對(duì)獨(dú)立,包括以下步驟對(duì)每個(gè)數(shù)據(jù)設(shè)置ID作為主鍵,以將多個(gè)數(shù)據(jù)映射成相互獨(dú)立的對(duì)象。
在一個(gè)復(fù)雜的系統(tǒng)中,管理的實(shí)體對(duì)象種類往往非常多,而且相互之間關(guān)系復(fù)雜,更主要的是這些實(shí)體種類和相互之間關(guān)系的規(guī)則都可能隨時(shí)發(fā)生變化,這種情況下非常適合于本發(fā)明的應(yīng)用。
本發(fā)明中的技術(shù)在這個(gè)系統(tǒng)中應(yīng)用后,效果非常好,使系統(tǒng)結(jié)構(gòu)非常清晰、易于管理和擴(kuò)展。由此可知,本發(fā)明的可行性得到充分的驗(yàn)證,前邊所描述的各種優(yōu)點(diǎn)也得到很好的體現(xiàn)。
本發(fā)明的其它特征和優(yōu)點(diǎn)將在隨后的說(shuō)明書中闡述,并且,部分地從說(shuō)明書中變得顯而易見(jiàn),或者通過(guò)實(shí)施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點(diǎn)可通過(guò)在所寫的說(shuō)明書、權(quán)利要求
書、以及附圖中所特別指出的結(jié)構(gòu)來(lái)實(shí)現(xiàn)和獲得。
此處所說(shuō)明的附圖用來(lái)提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本發(fā)明的示意性實(shí)施例及其說(shuō)明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中圖1示出了根據(jù)本發(fā)明第二實(shí)施例的數(shù)據(jù)庫(kù)結(jié)構(gòu)示意圖。
具體實(shí)施方式下面將參考附圖詳細(xì)說(shuō)明本發(fā)明。值得注意的是,下面描述本發(fā)明雖然部分內(nèi)容是針對(duì)關(guān)系數(shù)據(jù)庫(kù)進(jìn)行闡述,但是本發(fā)明顯然可應(yīng)用于其他數(shù)據(jù)庫(kù)。另外,在本發(fā)明中,數(shù)據(jù)庫(kù)不限定于數(shù)據(jù)表集合本身,應(yīng)當(dāng)包括數(shù)據(jù)庫(kù)產(chǎn)品以及以關(guān)系數(shù)據(jù)庫(kù)為中心的設(shè)計(jì)和開發(fā),例如涉及中間件開發(fā)、應(yīng)用軟件開發(fā)等。本發(fā)明可主要應(yīng)用于關(guān)系數(shù)據(jù)庫(kù)產(chǎn)品的設(shè)計(jì)和圍繞關(guān)系數(shù)據(jù)庫(kù)為核心的應(yīng)用軟件開發(fā)。
根據(jù)本發(fā)明的實(shí)施例,提供了一種面向?qū)ο髽?biāo)識(shí)方法,用于以面向?qū)ο蠓绞綐?biāo)識(shí)數(shù)據(jù)庫(kù)中的數(shù)據(jù),數(shù)據(jù)庫(kù)包括多個(gè)包括業(yè)務(wù)信息的數(shù)據(jù),每個(gè)數(shù)據(jù)的業(yè)務(wù)信息相對(duì)獨(dú)立,本方法包括以下步驟對(duì)每個(gè)數(shù)據(jù)設(shè)置ID作為主鍵,以將多個(gè)數(shù)據(jù)映射成相互獨(dú)立的對(duì)象。
對(duì)每個(gè)對(duì)象設(shè)置ID可包括以下步驟將每個(gè)ID均設(shè)置成在整個(gè)數(shù)據(jù)庫(kù)中是唯一的。
可以在整個(gè)數(shù)據(jù)庫(kù)中采用統(tǒng)一的規(guī)則和數(shù)據(jù)類型來(lái)設(shè)置每個(gè)ID。
在整個(gè)數(shù)據(jù)庫(kù)中采用統(tǒng)一的規(guī)則和數(shù)據(jù)類型來(lái)設(shè)置每個(gè)ID可包括以下步驟將ID設(shè)置為長(zhǎng)度為N+M位的整數(shù)或字符,其中,N和M均為大于0的正整數(shù),N位代表類標(biāo)識(shí),M位代表對(duì)象標(biāo)識(shí),類標(biāo)識(shí)用于標(biāo)識(shí)自己所屬的類,對(duì)象標(biāo)識(shí)用于在這個(gè)類的多個(gè)對(duì)象實(shí)例中唯一地標(biāo)識(shí)自己。
根據(jù)本發(fā)明的實(shí)施例,將ID設(shè)置為128位二進(jìn)制表示的整數(shù),其中N=64,M=64。ID設(shè)置為二進(jìn)制或十進(jìn)制表示的整數(shù),其中整個(gè)ID的值不超過(guò)64位的二進(jìn)制數(shù)。
在上述的面向?qū)ο髽?biāo)識(shí)方法中,還可包括以下步驟通過(guò)設(shè)置外鍵的值等于主鍵的值,以映射多個(gè)對(duì)象之間的關(guān)系。
例如,通過(guò)設(shè)置外鍵的值等于主鍵的值來(lái)在兩者之間建立關(guān)聯(lián)包括以下步驟通過(guò)在外鍵中存儲(chǔ)主鍵,外鍵不重復(fù),以映射多個(gè)對(duì)象之間的1∶1關(guān)系;或者通過(guò)在外鍵中存儲(chǔ)主鍵,外鍵有重復(fù),以映射多個(gè)對(duì)象之間的1∶多關(guān)系;或者設(shè)置關(guān)系表,其中含有多個(gè)外鍵來(lái)存儲(chǔ)多類對(duì)象的主鍵,外鍵有重復(fù),以映射多個(gè)對(duì)象之間的多∶多關(guān)系。
本發(fā)明以這種統(tǒng)一形式的兩段式標(biāo)識(shí)作為主鍵來(lái)進(jìn)行數(shù)據(jù)庫(kù)系統(tǒng)中數(shù)據(jù)的標(biāo)識(shí),使系統(tǒng)中的數(shù)據(jù)可唯一識(shí)別并形成面向?qū)ο蟮淖R(shí)別體系。這種標(biāo)識(shí)全局、簡(jiǎn)單、可識(shí)別、易于管理。
這個(gè)標(biāo)識(shí)的形式是面向?qū)ο蟮模祟悩?biāo)識(shí)和對(duì)象標(biāo)識(shí)的信息,在一個(gè)系統(tǒng)內(nèi)可全局唯一識(shí)別。在存儲(chǔ)上它體現(xiàn)為一個(gè)單值,易于處理。
本發(fā)明可提供一種數(shù)據(jù)結(jié)構(gòu),用來(lái)記錄已經(jīng)被分配使用的類標(biāo)識(shí),以及每個(gè)類標(biāo)識(shí)對(duì)應(yīng)的已分配對(duì)象標(biāo)識(shí)的和可用的對(duì)象標(biāo)識(shí)。針對(duì)數(shù)據(jù)量過(guò)大的問(wèn)題也可以將記錄優(yōu)化為用一個(gè)最小標(biāo)識(shí)值和最大標(biāo)識(shí)值的數(shù)據(jù)對(duì)來(lái)記錄一段標(biāo)識(shí)值。
在上述的面向?qū)ο髽?biāo)識(shí)方法中,還可包括以下步驟描述類標(biāo)識(shí)和類之間的映射關(guān)系,類和表之間的映射關(guān)系、以及各個(gè)類之間的派生關(guān)系。
根據(jù)本發(fā)明的實(shí)施例,要獲取類標(biāo)識(shí)時(shí),根據(jù)ID,通過(guò)分解獲取到N位的類標(biāo)識(shí);要獲取對(duì)應(yīng)的類時(shí),根據(jù)類標(biāo)識(shí),從映射中獲取到對(duì)應(yīng)的類;要獲取對(duì)應(yīng)的一個(gè)或多個(gè)表時(shí),根據(jù)類,從映射中獲取到對(duì)應(yīng)的一個(gè)或多個(gè)表;要獲取其派生的一個(gè)或多個(gè)類所對(duì)應(yīng)的多個(gè)表時(shí),根據(jù)類,從映射中獲取到其派生的一個(gè)或多個(gè)類從而獲取對(duì)應(yīng)到的多個(gè)表。
本發(fā)明可提供一種計(jì)算機(jī)程序,創(chuàng)建一個(gè)機(jī)構(gòu)來(lái)維護(hù)和管理類標(biāo)識(shí)值和對(duì)象標(biāo)識(shí)值的分配。整個(gè)系統(tǒng)擁有大小為N位長(zhǎng)特定數(shù)制的一個(gè)類標(biāo)識(shí)取值區(qū)間,每一個(gè)類標(biāo)識(shí)又可以分別擁有大小為M位長(zhǎng)特定數(shù)制的一個(gè)對(duì)象標(biāo)識(shí)取值區(qū)間。這個(gè)機(jī)構(gòu)能根據(jù)需要手動(dòng)或自動(dòng)地為不同的類分配不同的類標(biāo)識(shí),也能根據(jù)需要手動(dòng)或自動(dòng)地為同一個(gè)類的不同對(duì)象分配不同的對(duì)象標(biāo)識(shí)。
本發(fā)明可提供一種計(jì)算機(jī)程序,用一個(gè)機(jī)構(gòu)來(lái)描述并管理類標(biāo)識(shí)和類的映射關(guān)系、類和數(shù)據(jù)表的映射關(guān)系、各個(gè)類之間的派生和組合關(guān)系。利用這個(gè)機(jī)構(gòu),系統(tǒng)可以在上述ID標(biāo)識(shí)、類標(biāo)識(shí)、類和數(shù)據(jù)表之間相互轉(zhuǎn)換信息。
在上述的面向?qū)ο髽?biāo)識(shí)方法中,還可包括以下步驟根據(jù)ID中的類標(biāo)識(shí)查詢到對(duì)應(yīng)的類;動(dòng)態(tài)地創(chuàng)建出這個(gè)類的程序?qū)ο蟛⒉樵兊竭@個(gè)類對(duì)應(yīng)的表;從表中查詢到主鍵等于ID的記錄來(lái)為程序?qū)ο蠹虞d完整的數(shù)據(jù);運(yùn)行程序?qū)ο蟮母鞣N方法以完成相應(yīng)的業(yè)務(wù)處理。
在上述的面向?qū)ο髽?biāo)識(shí)方法中,還包括以下步驟在一個(gè)表中存儲(chǔ)具有相同類標(biāo)識(shí)的對(duì)象;或者在一個(gè)表中存儲(chǔ)具有不同類標(biāo)識(shí)的對(duì)象;或者將一個(gè)類的對(duì)象的數(shù)據(jù)內(nèi)容分布在不同的表中。
在上述的面向?qū)ο髽?biāo)識(shí)方法中,還包括以下步驟要查詢具體類的對(duì)象時(shí),根據(jù)這個(gè)類的名字,獲取到這個(gè)類對(duì)應(yīng)的表,根據(jù)表系統(tǒng)生成面向表的查詢語(yǔ)句來(lái)查詢對(duì)象;要查詢多個(gè)類的對(duì)象時(shí),則將每個(gè)類按上述方法處理,然后將結(jié)果匯總起來(lái)形成一個(gè)總的結(jié)果集;要查詢一個(gè)基類的對(duì)象時(shí),按照類之間關(guān)系的描述分析出基類派生的所有派生類,然后按上述的方法匯總成一個(gè)總的結(jié)果集。
在上述的面向?qū)ο髽?biāo)識(shí)方法中,還可包括以下步驟在界面控件中按照ID的格式存儲(chǔ)數(shù)據(jù)來(lái)實(shí)現(xiàn)界面和對(duì)象的關(guān)聯(lián)。本發(fā)明可提供一種計(jì)算機(jī)程序,在界面控件中存儲(chǔ)COID格式的數(shù)據(jù)來(lái)實(shí)現(xiàn)界面和對(duì)象的關(guān)聯(lián)。具體地,在TextBox、CheckBox、TreeView、ListView等控件中,利用控件內(nèi)置的一個(gè)隱含數(shù)據(jù)存儲(chǔ)機(jī)構(gòu)來(lái)存儲(chǔ)COID數(shù)據(jù)。在需要的時(shí)候,程序能根據(jù)這個(gè)COID值可靠地從數(shù)據(jù)庫(kù)中重新生成對(duì)象來(lái)完成處理。
本發(fā)明可提供一種計(jì)算機(jī)程序,可以實(shí)現(xiàn)動(dòng)態(tài)對(duì)象生成,根據(jù)一個(gè)上述ID值,體系可以生成一個(gè)面向?qū)ο蟮慕涌趯?duì)象。系統(tǒng)可以通過(guò)上述的體系根據(jù)上述ID值中的類標(biāo)識(shí)查詢到對(duì)應(yīng)的類,然后程序可以動(dòng)態(tài)地創(chuàng)建出這個(gè)類的程序?qū)ο蟛⒉樵兊竭@個(gè)類對(duì)應(yīng)的數(shù)據(jù)表,然后程序可以從數(shù)據(jù)表中查詢到主鍵等于上述ID的記錄來(lái)為程序?qū)ο蠹虞d完整的數(shù)據(jù),最后程序就可以運(yùn)行這個(gè)程序?qū)ο蟮母鞣N方法完成業(yè)務(wù)處理。
本發(fā)明在系統(tǒng)中定義了一套數(shù)據(jù)結(jié)構(gòu)來(lái)描述并管理已分配的類標(biāo)識(shí)和可用的類標(biāo)識(shí)、每個(gè)類標(biāo)識(shí)對(duì)應(yīng)的已分配對(duì)象標(biāo)識(shí)和可用的對(duì)象標(biāo)識(shí)、類標(biāo)識(shí)和類的映射關(guān)系、類和數(shù)據(jù)表的映射關(guān)系、各個(gè)類之間的派生和組合關(guān)系。
圍繞上述結(jié)構(gòu)設(shè)計(jì)一套程序來(lái)進(jìn)行相互之間的信息轉(zhuǎn)換和處理,包括實(shí)現(xiàn)類標(biāo)識(shí)和對(duì)象標(biāo)識(shí)的分配,為類分配類標(biāo)識(shí),為類的對(duì)象實(shí)例分配對(duì)象標(biāo)識(shí),在類標(biāo)識(shí)、類和數(shù)據(jù)表幾者之間進(jìn)行信息轉(zhuǎn)換等。
同樣形式的COID標(biāo)識(shí)被用來(lái)作為外鍵表述數(shù)據(jù)對(duì)象之間的關(guān)系,這種關(guān)系和傳統(tǒng)的數(shù)據(jù)關(guān)系表達(dá)方法相比具有和數(shù)據(jù)表解耦合、多態(tài)指向、全局指向、容易適應(yīng)變化的優(yōu)勢(shì)。總之,這項(xiàng)技術(shù)在物理層實(shí)現(xiàn)了用關(guān)系數(shù)據(jù)庫(kù)來(lái)描述面向?qū)ο蟮男畔Ⅲw系。在這個(gè)信息體系中,對(duì)數(shù)據(jù)是完全以一種面向?qū)ο笾械念惡蛯?duì)象的觀點(diǎn)來(lái)看待的,不同的類產(chǎn)生的各個(gè)對(duì)象存儲(chǔ)在不同的數(shù)據(jù)表中,但這些對(duì)象都具有統(tǒng)一的COID的主鍵來(lái)標(biāo)識(shí),而對(duì)象之間的關(guān)系通過(guò)在外鍵屬性中設(shè)置目標(biāo)對(duì)象的COID值來(lái)表達(dá)。這個(gè)體系容易實(shí)現(xiàn)非常復(fù)雜的數(shù)據(jù)關(guān)系而且容易擴(kuò)展,這是傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)表達(dá)方法完全不具有的優(yōu)勢(shì)。
和數(shù)據(jù)表解耦合的含義是一個(gè)COID形式的外鍵值包含了類標(biāo)識(shí)的信息,因此它的含義是“指向某個(gè)類中的某個(gè)對(duì)象”,而不象傳統(tǒng)的外鍵值那樣是“指向特定表中的某條記錄”。
多態(tài)指向的含義是因?yàn)槊總€(gè)COID形式的外鍵值的長(zhǎng)度和含義是相同的,且包含了類和對(duì)象的識(shí)別信息,所以一個(gè)COID變量通過(guò)取不同的值可以指向不同類的對(duì)象,這是面向?qū)ο蠓椒ㄖ卸鄳B(tài)性的實(shí)現(xiàn)基礎(chǔ)。
全局指向的含義是因?yàn)橄到y(tǒng)中的各數(shù)據(jù)對(duì)象原則上都采用COID來(lái)做主鍵標(biāo)識(shí),因此一個(gè)COID形式的外鍵值可以指向整個(gè)系統(tǒng)中任何一個(gè)數(shù)據(jù)對(duì)象。
容易適應(yīng)變化的含義是在很多業(yè)務(wù)發(fā)生變化的情況下,利用上述技術(shù),只是COID的值本身發(fā)生變化,不需要修改表的結(jié)構(gòu)就能適應(yīng)業(yè)務(wù)的變化。
以上述技術(shù)來(lái)改進(jìn)以關(guān)系數(shù)據(jù)庫(kù)為核心的應(yīng)用開發(fā)的設(shè)計(jì),新的數(shù)據(jù)結(jié)構(gòu)在概念設(shè)計(jì)、邏輯設(shè)計(jì)和物理設(shè)計(jì)以及最后的運(yùn)行期都具備面向?qū)ο蟮奶匦浴O啾容^,傳統(tǒng)的設(shè)計(jì)方法應(yīng)用面向?qū)ο蟮乃枷胧蔷植康模局辉诟拍钤O(shè)計(jì)階段存在,在設(shè)計(jì)的后期和最終具體化物理數(shù)據(jù)模型后就失去了面向?qū)ο蟮奶卣骱蛢?yōu)點(diǎn)。
在上述的面向?qū)ο髽?biāo)識(shí)方法中,還可包括以下步驟通過(guò)分解ID中的N位類ID來(lái)建立針對(duì)類的索引,索引用于從多條記錄中選擇出屬于某一個(gè)或多個(gè)類的對(duì)象。
在上述的面向?qū)ο髽?biāo)識(shí)方法中,還可包括以下步驟匯總多個(gè)表的數(shù)據(jù)的ID來(lái)生成索引,索引用于只根據(jù)一個(gè)對(duì)象的ID查找到其對(duì)象所對(duì)應(yīng)的表和記錄。
可以將根據(jù)本發(fā)明的ID稱之為COID,遵循上述規(guī)則設(shè)計(jì)的ID鍵可以簡(jiǎn)稱為COID,在這個(gè)基礎(chǔ)推演出相關(guān)的設(shè)計(jì)和開發(fā)技術(shù)就是COID模式。
本發(fā)明可以利用COID體系,設(shè)計(jì)多態(tài)的數(shù)據(jù)庫(kù)模型,比如一個(gè)表的一個(gè)字段,可以影射到一個(gè)類。而不是映射到一個(gè)具體的表。利用COID模式,實(shí)現(xiàn)多態(tài)的數(shù)據(jù)關(guān)系描述,這樣,數(shù)據(jù)庫(kù)中的一個(gè)外鍵字段,在含義上可以靈活地關(guān)聯(lián)到系統(tǒng)中任意一個(gè)對(duì)象,不再和具體的表綁定。利用COID模式可以簡(jiǎn)便地實(shí)現(xiàn)O/R Mapping技術(shù),實(shí)現(xiàn)單表模式。
本發(fā)明的核心思想是COID,COID模式的含義是Class-ObjectIdentifier,中文是類-對(duì)象標(biāo)識(shí)模式。本發(fā)明提供了適用于企業(yè)應(yīng)用開發(fā)的一種完全面向?qū)ο笏枷脒M(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì)的方法,可以對(duì)企業(yè)應(yīng)用系統(tǒng)的設(shè)計(jì)開發(fā)甚至數(shù)據(jù)庫(kù)產(chǎn)品的設(shè)計(jì)理念產(chǎn)生顯著影響。
COID(Class-Object Identifier)模式是在企業(yè)應(yīng)用系統(tǒng)的開發(fā)中,以一種面向?qū)ο蟮乃枷牒头椒▉?lái)進(jìn)行邏輯數(shù)據(jù)庫(kù)的設(shè)計(jì)和實(shí)現(xiàn),并以此為基礎(chǔ)進(jìn)行系統(tǒng)架構(gòu)設(shè)計(jì)和系統(tǒng)功能實(shí)現(xiàn),其關(guān)鍵特征是采用以類標(biāo)識(shí)+對(duì)象標(biāo)識(shí)組合成的全局唯一的COID主鍵來(lái)標(biāo)識(shí)數(shù)據(jù)對(duì)象。
COID模式首先體現(xiàn)在數(shù)據(jù)庫(kù)設(shè)計(jì)方面的理念改變。
一將數(shù)據(jù)庫(kù)中的數(shù)據(jù)作為對(duì)象看待,采用不包含業(yè)務(wù)信息的COID字段作為數(shù)據(jù)的主鍵。
二整個(gè)系統(tǒng)中各對(duì)象的COID鍵采用統(tǒng)一的名字和數(shù)據(jù)類型。
三一個(gè)具體的COID鍵取值由兩部分組成,N位是類標(biāo)識(shí)即類標(biāo)識(shí),M位是對(duì)象標(biāo)識(shí)即對(duì)象標(biāo)識(shí)。同一個(gè)類的不同對(duì)象實(shí)例具有相同的類標(biāo)識(shí),只是對(duì)象標(biāo)識(shí)不同,這樣在整個(gè)系統(tǒng)中每個(gè)對(duì)象的COID鍵值唯一。
采用COID模式會(huì)對(duì)數(shù)據(jù)庫(kù)設(shè)計(jì)理念和系統(tǒng)功能架構(gòu)開發(fā)產(chǎn)生顯著的影響。
本發(fā)明使系統(tǒng)開發(fā)變得清晰和容易。因?yàn)閿?shù)據(jù)庫(kù)對(duì)象都用COID形式來(lái)進(jìn)行唯一標(biāo)識(shí),圍繞數(shù)據(jù)庫(kù)的程序開發(fā)也遵循這樣的規(guī)則,程序語(yǔ)言可以用一個(gè)一致的單一數(shù)字或字符串變量來(lái)唯一并可靠地指示數(shù)據(jù)對(duì)象,這使系統(tǒng)中傳遞信息變得統(tǒng)一和容易,單一的COID值在一個(gè)程序的各函數(shù)內(nèi)部、不同的計(jì)算機(jī)程序之間、不同的計(jì)算機(jī)之間,以及網(wǎng)絡(luò)上傳遞COID都非常簡(jiǎn)單和有效,減少了傳統(tǒng)方法中大量的工作和問(wèn)題。
本發(fā)明也使數(shù)據(jù)庫(kù)數(shù)據(jù)和用戶界面的交互變得簡(jiǎn)單和容易。因?yàn)镃OID體現(xiàn)為一個(gè)簡(jiǎn)單的數(shù)值,計(jì)算機(jī)程序可以容易地在窗口控制上存儲(chǔ)隱含地存儲(chǔ)相關(guān)對(duì)象的COID值,使界面和對(duì)象關(guān)聯(lián)起來(lái),在需要的時(shí)候,程序能根據(jù)這個(gè)COID值可靠地從數(shù)據(jù)庫(kù)中重新生成對(duì)象來(lái)完成處理。傳統(tǒng)的方法總是針對(duì)不同情況做不同的處理,增加了不必要的復(fù)雜度。
以本技術(shù)為核心可以更好地實(shí)現(xiàn)ORM技術(shù),ORM技術(shù)使用面向?qū)ο蟮某绦騺?lái)處理對(duì)關(guān)系數(shù)據(jù)庫(kù)中數(shù)據(jù)的操作。以COID形式實(shí)現(xiàn)了數(shù)據(jù)的唯一標(biāo)識(shí)和關(guān)系描述,由此獲得的ORM能力比傳統(tǒng)的實(shí)現(xiàn)要強(qiáng)大得多。例如統(tǒng)一、簡(jiǎn)單的動(dòng)態(tài)對(duì)象生成任何時(shí)候如果獲取到一個(gè)COID值,都可以通過(guò)上述的體系根據(jù)COID值中的類標(biāo)識(shí)查詢到對(duì)應(yīng)的類,然后程序可以動(dòng)態(tài)地創(chuàng)建出這個(gè)類的程序?qū)ο蟛⒉樵兊竭@個(gè)類對(duì)應(yīng)的數(shù)據(jù)表,然后程序可以從數(shù)據(jù)表中查詢到主鍵等于COID的記錄來(lái)為程序?qū)ο蠹虞d完整的數(shù)據(jù),最后程序就可以運(yùn)行這個(gè)程序?qū)ο蟮母鞣N方法完成業(yè)務(wù)處理。這個(gè)過(guò)程就提供了統(tǒng)一的COID數(shù)值、數(shù)據(jù)和程序?qū)ο笾g的聯(lián)系紐帶,可以貫穿在整個(gè)程序的開發(fā)中實(shí)現(xiàn)各種面向?qū)ο蟮墓δ堋_@個(gè)過(guò)程完全是自動(dòng)化的,不需要開發(fā)者再做任何的工作。
可以實(shí)現(xiàn)面向?qū)ο蟮牟樵兩踔潦腔惒樵儽热缈赡苄枰樵円粋€(gè)基類的所有實(shí)例,而一個(gè)基類會(huì)有多個(gè)派生類,這些派生類的對(duì)象分別分布在不同的數(shù)據(jù)表中。利用上述技術(shù),系統(tǒng)可以分析出所有的派生類,然后獲取到它們對(duì)應(yīng)的所有數(shù)據(jù)表,將這些表的數(shù)據(jù)都查詢出來(lái)然后可以合并到一起就形成這個(gè)基類所有實(shí)例的結(jié)果。這個(gè)過(guò)程中的關(guān)鍵是每一個(gè)派生類的每一個(gè)對(duì)象實(shí)例都具有相同形式而數(shù)值不一的COID標(biāo)識(shí),所以可以合并結(jié)果并在后續(xù)的處理中唯一識(shí)別出各個(gè)對(duì)象來(lái)。而傳統(tǒng)的數(shù)據(jù)庫(kù)設(shè)計(jì)是難以滿足這個(gè)條件的。
本發(fā)明可以實(shí)現(xiàn)和優(yōu)化以上述思想和方法為中心的各種支持功能。具體地實(shí)現(xiàn)實(shí)現(xiàn)面向?qū)ο笮问降牟樵冋Z(yǔ)法。
針對(duì)COID形式的數(shù)據(jù)進(jìn)行查詢的優(yōu)化。
針對(duì)COID形式數(shù)據(jù)進(jìn)行特殊的索引實(shí)現(xiàn)。
實(shí)現(xiàn)其它的一些輔助操作。
進(jìn)一步地,這些技術(shù)可應(yīng)用在關(guān)系數(shù)據(jù)庫(kù)的設(shè)計(jì)上,在關(guān)系數(shù)據(jù)庫(kù)產(chǎn)品中內(nèi)置。關(guān)系數(shù)據(jù)庫(kù)產(chǎn)品可以直接支持形如COID這樣的字段類型,以及上述的元數(shù)據(jù)管理體系和相關(guān)的處理和優(yōu)化,為應(yīng)用開發(fā)提供強(qiáng)有力的支持。
而COID首先是從數(shù)據(jù)描述層解決了對(duì)象的標(biāo)識(shí)問(wèn)題,將數(shù)據(jù)完全按對(duì)象的方式來(lái)進(jìn)行設(shè)計(jì),理念層面是和O/R Mapping產(chǎn)品不一樣的。
在數(shù)據(jù)庫(kù)中數(shù)據(jù)的組織已經(jīng)被處理成對(duì)象體系的基礎(chǔ)上,再利用O/R Mapping映射機(jī)制建立編程語(yǔ)言的對(duì)象和數(shù)據(jù)庫(kù)的對(duì)象之間的聯(lián)系具有更大的價(jià)值。上述的統(tǒng)一簡(jiǎn)單的動(dòng)態(tài)對(duì)象生成、面向?qū)ο蟮幕惒樵兊榷汲浞煮w現(xiàn)這一區(qū)別。
本發(fā)明的理念將主要實(shí)現(xiàn)動(dòng)態(tài)的ORM,在運(yùn)行時(shí)可以根據(jù)元數(shù)據(jù)配置動(dòng)態(tài)調(diào)整行為。在此舉兩個(gè)例子來(lái)描述COID的用法。
實(shí)施例一數(shù)據(jù)庫(kù)設(shè)計(jì)的示例假定一個(gè)公司需要一個(gè)CRM系統(tǒng)來(lái)管理客戶的信息以及相互之間的關(guān)系,客戶的類型有多種,可能是一個(gè)人、也可能是一個(gè)組織機(jī)構(gòu)如商業(yè)企業(yè)、政府部門等,同時(shí),系統(tǒng)中也管理訂單,每張訂單需要記錄所屬的客戶。
應(yīng)用COID模式時(shí),體現(xiàn)在數(shù)據(jù)庫(kù)上需要定義數(shù)據(jù)表TPerson、TCorporation、Tdepartment和TorderFrom,在系統(tǒng)中要定義類CPerson、CCorporation、Cdepartment、CorderFrom來(lái)實(shí)現(xiàn)這些數(shù)據(jù)對(duì)象的行為實(shí)現(xiàn)。根據(jù)COID的原則,為不同的類分配類標(biāo)識(shí),具體為Cperson=000001、CCorporation=000002、CDepartment=000003、CorderFrom=000004。一個(gè)具體對(duì)象的類標(biāo)識(shí)由其所屬的類來(lái)確定,其對(duì)象標(biāo)識(shí)值從1開始,由系統(tǒng)自增量來(lái)產(chǎn)生,假定設(shè)計(jì)為12位。這樣產(chǎn)生的一個(gè)示例快照數(shù)據(jù)如下
從這些數(shù)據(jù)中可以看到對(duì)象的主鍵和外鍵的形式完全統(tǒng)一,具有相同的形式,而且具備面向?qū)ο蠓椒ㄖ兄匾亩鄳B(tài)數(shù)據(jù)的特征,比如很明顯的是TorderFrom這個(gè)表的客戶COID字段是一個(gè)多態(tài)的外鍵,可以存儲(chǔ)不同類型的客戶,在示例數(shù)據(jù)三條訂單的客戶分別是商業(yè)企業(yè)類型的萬(wàn)翔科技(000002000000000001)、個(gè)人類型的王芳(000003000000000002)和政府部門的市國(guó)土資源局(000003000000000001)。事實(shí)上系統(tǒng)中其它任何一種類型的對(duì)象的COID主鍵值也可以填寫到這個(gè)外鍵字段中成為訂單的客戶,這充分體現(xiàn)了COID模式在數(shù)據(jù)設(shè)計(jì)和表達(dá)上的靈活性。
從系統(tǒng)演變的角度來(lái)看,如果哪一天這個(gè)公司的實(shí)力提升,將業(yè)務(wù)發(fā)展到了火星上,系統(tǒng)中需要增加新的一種客戶類型,那么可以建立一個(gè)新的類CMars和TMars表簡(jiǎn)單地結(jié)合到系統(tǒng)中。TOrderFrom這個(gè)表不需要任何變化!系統(tǒng)就能接納這樣的新數(shù)據(jù)的加入從而開展轟轟烈烈的火星營(yíng)銷計(jì)劃,這種結(jié)構(gòu)上的可擴(kuò)展性能解決很多類似的系統(tǒng)擴(kuò)展和演變問(wèn)題,相比較之下,ID模式是不行的,因?yàn)椴煌念愋偷腎D會(huì)產(chǎn)生重復(fù)從而產(chǎn)生二義性,而業(yè)務(wù)主鍵模式就更不用說(shuō)了,新的數(shù)據(jù)的主鍵的數(shù)據(jù)類型可能和原設(shè)計(jì)的結(jié)構(gòu)可能就是完全不一致的,根本無(wú)法在不改變現(xiàn)有結(jié)構(gòu)的情況下填寫進(jìn)來(lái)。
實(shí)施例二業(yè)務(wù)功能實(shí)現(xiàn)的示例實(shí)施例一表達(dá)了COID模式下下數(shù)據(jù)庫(kù)設(shè)計(jì)的簡(jiǎn)潔、靈活和高度的可擴(kuò)展性,而COID更大的價(jià)值可能體現(xiàn)在系統(tǒng)的業(yè)務(wù)開發(fā)上。
想象上述系統(tǒng)需要用一個(gè)TreeView控件來(lái)展現(xiàn)很多不同類別的對(duì)象,在這個(gè)樹狀控件的各個(gè)節(jié)點(diǎn)可以是一張訂單、一個(gè)個(gè)人客戶、一個(gè)公司客戶...等等。當(dāng)用戶用用鼠標(biāo)雙擊任意一個(gè)節(jié)點(diǎn)的時(shí)候系統(tǒng)都能觸發(fā)這個(gè)對(duì)象的操作。
看起來(lái)簡(jiǎn)單,但事實(shí)上這個(gè)功能的實(shí)現(xiàn)難度相當(dāng)大,關(guān)鍵問(wèn)題是如何以一種統(tǒng)一的方式來(lái)識(shí)別每個(gè)節(jié)點(diǎn)中存儲(chǔ)的對(duì)象。一般是利用TreeView節(jié)點(diǎn)的圖標(biāo)、字符串等形式存儲(chǔ)對(duì)象的識(shí)別信息,這種方法顯然不通用,并且識(shí)別信息的解釋常存在二義性等諸多問(wèn)題。
現(xiàn)在采用COID模式則是非常簡(jiǎn)單和可靠的,因?yàn)槊恳粋€(gè)treeview的節(jié)點(diǎn)都可以隱含地保存一個(gè)數(shù)字,這樣就可以將對(duì)象的COID保存起來(lái),COID的統(tǒng)一性、簡(jiǎn)潔性和全局唯一性以及可識(shí)別性可以保證這種方法的通用、方便和可靠。
圖1示出了根據(jù)本發(fā)明第二實(shí)施例的數(shù)據(jù)庫(kù)結(jié)構(gòu)示意圖。下面將示出代碼是如何處理的,當(dāng)用戶雙擊一個(gè)節(jié)點(diǎn)時(shí),treeview對(duì)雙擊事件的處理代碼如下{long COID=treenode->value;//從雙擊的樹狀控件節(jié)點(diǎn)取出隱含保存的COID;CBaseObject*p=GetObject(COID);//用COID調(diào)用系統(tǒng)函數(shù)GetObject創(chuàng)建具體的對(duì)象p->OnOpen();//調(diào)用對(duì)象的OnOpen的虛函數(shù)}
這里補(bǔ)充說(shuō)明一下,按COID模式開發(fā)的系統(tǒng)遵循一定的類體系結(jié)構(gòu)來(lái)充分體現(xiàn)面向?qū)ο蠓椒ǖ膬?yōu)勢(shì),如圖中,CBaseObject類是一個(gè)系統(tǒng)定義的基類,其它的數(shù)據(jù)庫(kù)相關(guān)的類如都CPerson、Ccorporation都從它派生。
注意CbaseObject*GetObject(long COID),這個(gè)函數(shù)體現(xiàn)了圍繞COID模式進(jìn)行開發(fā)的特征,具體來(lái)說(shuō),這個(gè)函數(shù)的作用是傳入一個(gè)coID,創(chuàng)建并返回一個(gè)具體的對(duì)象,其是利用元數(shù)據(jù)來(lái)實(shí)現(xiàn)的,系統(tǒng)中用元數(shù)據(jù)表來(lái)存儲(chǔ)類、類標(biāo)識(shí)的對(duì)應(yīng)關(guān)系。
GetObject函數(shù)在得到COID后,分析出前邊6位的類標(biāo)識(shí),這樣就能在系統(tǒng)元數(shù)據(jù)表中反查出對(duì)應(yīng)的類,之后就能創(chuàng)建類的實(shí)例對(duì)象,然后調(diào)用對(duì)象初始化和加載數(shù)據(jù)等方法并返回。接收到這個(gè)對(duì)象的代碼(這里是treeview的事件代碼)在接收這個(gè)對(duì)象后就可調(diào)用其虛函數(shù)OnOpen,這樣系統(tǒng)每增加一個(gè)類只要實(shí)現(xiàn)它的OnOpen函數(shù)即可,樹狀控件的事件處理代碼一次編好后就不用作變化。
這是完全的面向?qū)ο蟮脑O(shè)計(jì)和實(shí)現(xiàn)方法。因?yàn)閿?shù)據(jù)庫(kù)設(shè)計(jì)采用了面向?qū)ο蟮捏w系,它和面向?qū)ο笳Z(yǔ)言體系配合起來(lái),就使得這個(gè)過(guò)程變得簡(jiǎn)便和藝術(shù)化。
COID模式的基礎(chǔ)是數(shù)據(jù)庫(kù)主鍵設(shè)計(jì)的提升和統(tǒng)一,傳統(tǒng)的兩種主鍵設(shè)計(jì)模式是包含業(yè)務(wù)信息的主鍵方案和完全不包含任何信息的ID模式方案。這樣看起來(lái)COID模式含有兩個(gè)信息一個(gè)類標(biāo)識(shí)和一個(gè)對(duì)象標(biāo)識(shí)。應(yīng)該明白,前者模式對(duì)包含信息沒(méi)有做任何規(guī)范,所以做的信息的假定是不標(biāo)準(zhǔn)的、不具有普遍性而且也可能是不穩(wěn)定的,而對(duì)于類標(biāo)識(shí)和對(duì)象標(biāo)識(shí)這樣的普遍性的描述是面向?qū)ο笏枷氲幕A(chǔ)的表達(dá),因此它的概括性、普適性和穩(wěn)定性都是非常強(qiáng)的??梢悦黠@感覺(jué)到類標(biāo)識(shí)+對(duì)象標(biāo)識(shí)具備一種“簡(jiǎn)約的美感”。將ID包含信息均衡到類標(biāo)識(shí)+對(duì)象標(biāo)識(shí)的程度應(yīng)該是比較合理的,其它信息是別屬性字段應(yīng)承擔(dān)的職責(zé)而不是ID,ID承載類和對(duì)象的標(biāo)識(shí)是其恰倒好處的職責(zé)所在。
根據(jù)本發(fā)明,COID有幾種較為具體的方案1、采用N位十進(jìn)制數(shù)字的類標(biāo)識(shí)結(jié)合M位十進(jìn)制數(shù)字的對(duì)象標(biāo)識(shí)的形式,N+M長(zhǎng)度的十進(jìn)制數(shù)值的總大小不超過(guò)64位二進(jìn)制數(shù)的大小。方案下總的大小可以用一個(gè)8字節(jié)長(zhǎng)的整數(shù)類型來(lái)表示,在32位計(jì)算環(huán)境下實(shí)現(xiàn)容易,性能優(yōu)越,且能節(jié)省空間,而且十進(jìn)制的表示方式具有一定的可閱讀性。缺點(diǎn)是一些計(jì)算要用乘除運(yùn)算影響效率,另外ID的取值空間有限,要考慮ID分配溢出的問(wèn)題。
2、采用64位二進(jìn)制的類標(biāo)識(shí)結(jié)合64位二進(jìn)制的對(duì)象標(biāo)識(shí)的形式,這種形式的數(shù)字總長(zhǎng)度是128位二進(jìn)制位,長(zhǎng)度和GUID一樣,這樣長(zhǎng)的數(shù)字使類標(biāo)識(shí)和對(duì)象標(biāo)識(shí)值溢出的可能性大大降低。更主要的是,在分解一個(gè)COID的時(shí)候不需要做除法運(yùn)算,因?yàn)橛?jì)算機(jī)通常是以16個(gè)字節(jié)來(lái)存儲(chǔ)這個(gè)數(shù)字,要獲取類標(biāo)識(shí)和對(duì)象標(biāo)識(shí)只需要直接提取各自對(duì)應(yīng)的八個(gè)字節(jié)就可以了,計(jì)算性能會(huì)有大幅度提升,數(shù)據(jù)庫(kù)產(chǎn)品也可以根據(jù)這樣的數(shù)據(jù)類型更好地實(shí)現(xiàn)數(shù)據(jù)索引。這種方案的缺點(diǎn)是占用空間大,但隨著硬件的不斷提升這個(gè)弱點(diǎn)將漸漸消失。
3、采用N位字符串的類標(biāo)識(shí)結(jié)合M位字符串的對(duì)象標(biāo)識(shí)的形式。這種方式不用數(shù)字操作而用字符串操作,性能方面較差,也需要占用更多的存儲(chǔ)空間。主要的好處是可以具有較好的可讀性。
下面將分析本發(fā)明帶來(lái)的好處。
本發(fā)明將所有數(shù)據(jù)對(duì)象的標(biāo)識(shí)進(jìn)行了標(biāo)準(zhǔn)化。所有的數(shù)據(jù)對(duì)象的鍵標(biāo)識(shí)都具有相同的字段名字、數(shù)據(jù)類型和大小,這樣就極大簡(jiǎn)化了數(shù)據(jù)庫(kù)設(shè)計(jì)和開發(fā)工作。因?yàn)閿?shù)據(jù)庫(kù)的設(shè)計(jì)三個(gè)要素就是實(shí)體、實(shí)體屬性、實(shí)體之間的關(guān)系,COID統(tǒng)一了實(shí)體的統(tǒng)一標(biāo)識(shí),相當(dāng)于統(tǒng)一解決了實(shí)體和實(shí)體關(guān)系兩個(gè)要素的實(shí)現(xiàn)問(wèn)題,這使數(shù)據(jù)庫(kù)結(jié)構(gòu)不用在這方面下工夫。
本發(fā)明將系統(tǒng)中所有數(shù)據(jù)對(duì)象的鍵標(biāo)識(shí)進(jìn)行了唯一化。一個(gè)COID數(shù)字唯一標(biāo)識(shí)一個(gè)對(duì)象,等于在數(shù)據(jù)庫(kù)的層面解決了面向?qū)ο蠓椒ㄕ撝袑?duì)象本體標(biāo)識(shí)問(wèn)題。可以說(shuō)一個(gè)COID對(duì)于數(shù)據(jù)庫(kù)就好比一個(gè)指針值對(duì)于C++,一個(gè)引用對(duì)于Java的效果。下面對(duì)此做一個(gè)比較●每一個(gè)C++指針都是32位的整數(shù),而所有的COID都是統(tǒng)一大小的數(shù)字,兩者是等同的。
●在一個(gè)進(jìn)程中每一個(gè)C++指針都指向一個(gè)對(duì)象,而COID作為主外鍵在一個(gè)數(shù)據(jù)庫(kù)中標(biāo)識(shí)一個(gè)數(shù)據(jù)對(duì)象,兩者是等同的。
●C++指針是多態(tài)的,同樣是一個(gè)32位的數(shù)字可以指向不同類型的對(duì)象,COID同樣具有這樣的多態(tài)特征,由于包含類標(biāo)識(shí)和對(duì)象標(biāo)識(shí)信息,一個(gè)相同形式的COID鍵值可以指向系統(tǒng)中任何一個(gè)不同類型的數(shù)據(jù)對(duì)象。
●C++指針具有簡(jiǎn)單的形式,就是一個(gè)數(shù)字,COID總體上也體現(xiàn)為一個(gè)數(shù)字,這一點(diǎn)非常重要。可以回想一下傳統(tǒng)ID鍵值不能獨(dú)立標(biāo)識(shí)出對(duì)象。要標(biāo)識(shí)的話通常是在具體上下文環(huán)境里隱含規(guī)定了ID鍵值所屬類別,這樣帶來(lái)設(shè)計(jì)和代碼不能重用的問(wèn)題;要想重用的話就要給ID鍵值再配上一個(gè)“類型”字段來(lái)完成對(duì)對(duì)象的標(biāo)識(shí),這對(duì)具有普遍性的工作帶來(lái)的開銷是巨大的,如果你不信的話想象一下如果每一個(gè)C++指針都需要用兩個(gè)數(shù)字表達(dá)的話是什么情形。
這使數(shù)據(jù)庫(kù)設(shè)計(jì)的方法發(fā)生了根本的變化。整個(gè)庫(kù)不再是表、記錄的組合,而是一系列對(duì)象以及對(duì)象之間關(guān)系的銜接。以前面向?qū)ο蟮臄?shù)據(jù)庫(kù)設(shè)計(jì)只是在初期階段使用UML等面向?qū)ο蟮墓ぞ邅?lái)輔助業(yè)務(wù)分析和設(shè)計(jì),在后期映射為表、字段后就丟棄了初期的對(duì)象體系架構(gòu)。而COID模式則在數(shù)據(jù)庫(kù)初期設(shè)計(jì)、后期實(shí)現(xiàn)以及運(yùn)行的整個(gè)生命周期中都是完全的面向?qū)ο蟮捏w系,甚至對(duì)于繼承、多態(tài)等面向?qū)ο蟮奶卣饕材苡行У乇磉_(dá)和實(shí)現(xiàn)。
開發(fā)上帶來(lái)的好處是COID模式更大的價(jià)值所在。以前的代碼開發(fā)在對(duì)象標(biāo)識(shí)、對(duì)象間關(guān)系方面等方面的處理需要做大量的、重復(fù)的工作,而現(xiàn)在這些內(nèi)容能作為共性化的東西提取出來(lái)統(tǒng)一實(shí)現(xiàn),剩下來(lái)的工作就只是集中在真正的業(yè)務(wù)領(lǐng)域上了。而且COID標(biāo)識(shí)是簡(jiǎn)約的,它只是1個(gè)數(shù)字,在設(shè)計(jì)、開發(fā)、系統(tǒng)交互等方面產(chǎn)生的方便性和效率都非常好!比如說(shuō)在多層架構(gòu)開發(fā)模式下,如果任何一個(gè)數(shù)據(jù)對(duì)象的標(biāo)識(shí)都可以由一個(gè)數(shù)字來(lái)代表,就可以簡(jiǎn)化在不同的層、不同的模塊以及不同的計(jì)算機(jī)之間傳遞數(shù)據(jù)對(duì)象的形式和難度,使以前錯(cuò)綜復(fù)雜的系統(tǒng)業(yè)務(wù)結(jié)構(gòu)變得相對(duì)簡(jiǎn)單,EAI、SOA這樣理念的系統(tǒng)設(shè)計(jì)構(gòu)建也變得更為容易。
以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對(duì)于本領(lǐng)域的技術(shù)人員來(lái)說(shuō),本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種面向?qū)ο髽?biāo)識(shí)方法,用于以面向?qū)ο蠓绞綐?biāo)識(shí)數(shù)據(jù)庫(kù)中的數(shù)據(jù),所述數(shù)據(jù)庫(kù)包括多個(gè)包括業(yè)務(wù)信息的數(shù)據(jù),每個(gè)所述數(shù)據(jù)的業(yè)務(wù)信息相對(duì)獨(dú)立,其特征在于,包括以下步驟對(duì)每個(gè)所述數(shù)據(jù)設(shè)置ID作為主鍵,以將所述多個(gè)數(shù)據(jù)映射成相互獨(dú)立的對(duì)象。
2.根據(jù)權(quán)利要求
1所述的面向?qū)ο髽?biāo)識(shí)方法,其特征在于,對(duì)每個(gè)所述對(duì)象設(shè)置ID包括以下步驟將每個(gè)所述ID均設(shè)置成在整個(gè)所述數(shù)據(jù)庫(kù)中是唯一的。
3.根據(jù)權(quán)利要求
2所述的面向?qū)ο髽?biāo)識(shí)方法,其特征在于,在整個(gè)所述數(shù)據(jù)庫(kù)中采用統(tǒng)一的規(guī)則和數(shù)據(jù)類型來(lái)設(shè)置每個(gè)所述ID。
4.根據(jù)權(quán)利要求
3所述的面向?qū)ο髽?biāo)識(shí)方法,其特征在于,在整個(gè)所述數(shù)據(jù)庫(kù)中采用統(tǒng)一的規(guī)則和數(shù)據(jù)類型來(lái)設(shè)置每個(gè)所述ID包括以下步驟將所述ID設(shè)置為長(zhǎng)度為N+M位的整數(shù)或字符,其中,N和M均為大于0的正整數(shù),N位代表類標(biāo)識(shí),M位代表對(duì)象標(biāo)識(shí),所述類標(biāo)識(shí)用于唯一地標(biāo)識(shí)自己所屬的類,所述對(duì)象標(biāo)識(shí)用于在這個(gè)類的多個(gè)對(duì)象實(shí)例中唯一地標(biāo)識(shí)自己。
5.根據(jù)權(quán)利要求
4所述的面向?qū)ο髽?biāo)識(shí)方法,其特征在于,所述ID設(shè)置為128位二進(jìn)制表示的整數(shù),其中N=64,M=64。
6.根據(jù)權(quán)利要求
4所述的面向?qū)ο髽?biāo)識(shí)方法,其特征在于,所述ID設(shè)置為二進(jìn)制或十進(jìn)制表示的整數(shù),整個(gè)ID的值不超過(guò)264。
7.根據(jù)權(quán)利要求
4所述的面向?qū)ο髽?biāo)識(shí)方法,其特征在于,還包括以下步驟通過(guò)設(shè)置外鍵的值等于所述ID的值,以描述所述多個(gè)對(duì)象之間的關(guān)系。
8.根據(jù)權(quán)利要求
7所述的面向?qū)ο髽?biāo)識(shí)方法,其特征在于,通過(guò)設(shè)置外鍵的值等于所述主鍵的值來(lái)在兩者之間建立關(guān)聯(lián)包括以下步驟通過(guò)在所述外鍵中存儲(chǔ)所述ID,外鍵不重復(fù),以映射所述多個(gè)對(duì)象之間的1∶1關(guān)系;或者通過(guò)在所述外鍵中存儲(chǔ)所述ID,所述外鍵有重復(fù),以映射所述多個(gè)對(duì)象之間的1∶多關(guān)系;或者設(shè)置關(guān)系表,其中含有多個(gè)外鍵來(lái)存儲(chǔ)所述ID,所述外鍵有重復(fù),以映射所述多個(gè)對(duì)象之間的多∶多關(guān)系。
9.根據(jù)權(quán)利要求
4所述的面向?qū)ο髽?biāo)識(shí)方法,其特征在于,還包括以下步驟描述類標(biāo)識(shí)和類之間的映射關(guān)系,類和表之間的映射關(guān)系、以及各個(gè)類之間的派生關(guān)系。
10.根據(jù)權(quán)利要求
9所述的面向?qū)ο髽?biāo)識(shí)方法,其特征在于,還包括以下步驟要獲取類標(biāo)識(shí)時(shí),根據(jù)所述ID,通過(guò)分解獲取到N位的所述類標(biāo)識(shí);要獲取對(duì)應(yīng)的類時(shí),根據(jù)所述類標(biāo)識(shí),從所述映射中獲取到對(duì)應(yīng)的類;要獲取對(duì)應(yīng)的一個(gè)或多個(gè)表時(shí),根據(jù)所述類,從所述映射中獲取到對(duì)應(yīng)的一個(gè)或多個(gè)表;要獲取其派生的一個(gè)或多個(gè)類所對(duì)應(yīng)的多個(gè)表時(shí),根據(jù)所述類,從映射中獲取到其派生的一個(gè)或多個(gè)類從而獲取對(duì)應(yīng)到的多個(gè)表。
11.根據(jù)權(quán)利要求
9所述的面向?qū)ο髽?biāo)識(shí)方法,其特征在于,還包括以下步驟根據(jù)所述ID中的類標(biāo)識(shí)查詢到對(duì)應(yīng)的類;動(dòng)態(tài)地創(chuàng)建出這個(gè)類的程序?qū)ο蟛⒉樵兊竭@個(gè)類對(duì)應(yīng)的表;從所述表中查詢到主鍵等于所述ID的記錄來(lái)為所述程序?qū)ο蠹虞d完整的數(shù)據(jù);運(yùn)行所述程序?qū)ο蟮母鞣N方法以完成相應(yīng)的業(yè)務(wù)處理。
12.根據(jù)權(quán)利要求
4所述的面向?qū)ο髽?biāo)識(shí)方法,其特征在于,還包括以下步驟在一個(gè)表中存儲(chǔ)具有相同類標(biāo)識(shí)的對(duì)象;或者在一個(gè)表中存儲(chǔ)具有不同類標(biāo)識(shí)的對(duì)象;或者將一個(gè)類的對(duì)象的數(shù)據(jù)內(nèi)容分布在不同的表中。
13.根據(jù)權(quán)利要求
4所述的面向?qū)ο髽?biāo)識(shí)方法,其特征在于,還包括以下步驟要查詢具體類的對(duì)象時(shí),根據(jù)這個(gè)類的名字,獲取到這個(gè)類對(duì)應(yīng)的表,根據(jù)表系統(tǒng)生成面向表的查詢語(yǔ)句來(lái)查詢對(duì)象;要查詢多個(gè)類的對(duì)象時(shí),則將每個(gè)類按上述方法處理,然后將結(jié)果匯總起來(lái)形成一個(gè)總的結(jié)果集;要查詢一個(gè)基類的對(duì)象時(shí),按照類之間關(guān)系的描述分析出基類派生的所有派生類,然后按上述的方法匯總成一個(gè)總的結(jié)果集。
14.根據(jù)權(quán)利要求
13所述的面向?qū)ο髽?biāo)識(shí)方法,其特征在于,結(jié)果集中的每一條數(shù)據(jù)都包含一個(gè)所述ID。
15.根據(jù)權(quán)利要求
14所述的面向?qū)ο髽?biāo)識(shí)方法,其特征在于,還包括以下步驟根據(jù)所述結(jié)果集中的所述ID中的N位類標(biāo)識(shí)查詢到對(duì)應(yīng)的類;動(dòng)態(tài)地創(chuàng)建出這個(gè)類的程序?qū)ο蟛⒉樵兊竭@個(gè)類對(duì)應(yīng)的表;從所述表中查詢到主鍵等于所述ID的記錄來(lái)為所述程序?qū)ο蠹虞d完整的數(shù)據(jù);運(yùn)行所述程序?qū)ο蟮母鞣N方法以完成相應(yīng)的業(yè)務(wù)處理。
16.根據(jù)權(quán)利要求
4所述的面向?qū)ο髽?biāo)識(shí)方法,其特征在于,還包括以下步驟在界面控件中存儲(chǔ)所述ID來(lái)實(shí)現(xiàn)界面和所述對(duì)象的關(guān)聯(lián)。
17.根據(jù)權(quán)利要求
16所述的面向?qū)ο髽?biāo)識(shí)方法,其特征在于,還包括以下步驟從界面控件中取出存儲(chǔ)的所述ID;根據(jù)所述ID中的N位類標(biāo)識(shí)查詢到對(duì)應(yīng)的類;動(dòng)態(tài)地創(chuàng)建出這個(gè)類的程序?qū)ο蟛⒉樵兊竭@個(gè)類對(duì)應(yīng)的表;從所述表中查詢到主鍵等于所述ID的記錄來(lái)為所述程序?qū)ο蠹虞d完整的數(shù)據(jù);運(yùn)行所述程序?qū)ο蟮母鞣N方法以完成相應(yīng)的業(yè)務(wù)處理。
18.根據(jù)權(quán)利要求
4所述的面向?qū)ο髽?biāo)識(shí)方法,其特征在于,還包括以下步驟通過(guò)分解所述ID中的N位類ID來(lái)建立針對(duì)類的索引,所述索引用于從多條記錄中選擇出屬于某一個(gè)或多個(gè)類的對(duì)象。
19.根據(jù)權(quán)利要求
4所述的面向?qū)ο髽?biāo)識(shí)方法,其特征在于,還包括以下步驟匯總多個(gè)表的數(shù)據(jù)的所述ID來(lái)生成索引,所述索引用于只根據(jù)一個(gè)對(duì)象的ID來(lái)查找到其對(duì)象所對(duì)應(yīng)的表和記錄。
20.根據(jù)權(quán)利要求
1至19中任一項(xiàng)所述的面向?qū)ο髽?biāo)識(shí)方法,其特征在于,所述數(shù)據(jù)庫(kù)包括關(guān)系數(shù)據(jù)庫(kù)。
專利摘要
本發(fā)明提供了一種面向?qū)ο髽?biāo)識(shí)方法,用于以面向?qū)ο蠓绞綐?biāo)識(shí)數(shù)據(jù)庫(kù)中的數(shù)據(jù),數(shù)據(jù)庫(kù)包括多個(gè)包括業(yè)務(wù)信息的數(shù)據(jù),每個(gè)數(shù)據(jù)的業(yè)務(wù)信息相對(duì)獨(dú)立,本方法包括以下步驟對(duì)每個(gè)數(shù)據(jù)設(shè)置ID作為主鍵,以將多個(gè)數(shù)據(jù)映射成相互獨(dú)立的對(duì)象。
文檔編號(hào)G06F17/30GK1996308SQ200610173201
公開日2007年7月11日 申請(qǐng)日期2006年12月30日
發(fā)明者陳 峰 申請(qǐng)人:陳 峰導(dǎo)出引文BiBTeX, EndNote, RefMan
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
霞浦县| 宁津县| 尤溪县| 大城县| 玛曲县| 射洪县| 密山市| 铜陵市| 湘潭市| 化州市| 江永县| 夏邑县| 金阳县| 汶川县| 宕昌县| 紫金县| 兴化市| 沈阳市| 西宁市| 九台市| 云龙县| 莱芜市| 关岭| 卢氏县| 扬中市| 洛川县| 扶绥县| 天全县| 灵台县| 垣曲县| 黑山县| 大安市| 五寨县| 北流市| 杭州市| 济源市| 晴隆县| 乌拉特前旗| 威海市| 烟台市| 浦北县|