專利名稱:提供關(guān)系數(shù)據(jù)的一致性層次抽象化的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及在關(guān)系數(shù)據(jù)庫(kù)中儲(chǔ)存根據(jù)一定層次進(jìn)行組織的信息,尤其涉及管理用于捕捉該層次的元數(shù)據(jù)的技術(shù)。
背景技術(shù):
人們傾向于按類別組織信息。在其中組織信息的類別是通常相對(duì)于彼此以某種形式的層次進(jìn)行組織的類別本身。例如,個(gè)體的動(dòng)物屬于種,種屬于屬,屬屬于科,科屬于目,目屬于綱。
隨著計(jì)算機(jī)系統(tǒng)的出現(xiàn),儲(chǔ)存電子信息的技術(shù)已經(jīng)得到發(fā)展,很大程度上反映了人們對(duì)分層組織的需求。例如,通常采用基于分層組織原理實(shí)現(xiàn)傳統(tǒng)計(jì)算機(jī)文件系統(tǒng)。具體地,通常的文件系統(tǒng)具有按層次設(shè)置的目錄以及儲(chǔ)存在目錄中的文檔(document)。理想地是,目錄之間的層次關(guān)系反映了已經(jīng)賦予目錄的含義之間的某種直觀關(guān)系。同樣,理想地是,每個(gè)文檔基于在文檔的內(nèi)容和用來(lái)儲(chǔ)存該文件的目錄被賦予的含義之間的某種直觀關(guān)系被儲(chǔ)存在目錄中。
圖1示出了典型的文件系統(tǒng)的實(shí)例。示出的文件系統(tǒng)包括按層次排列的多個(gè)目錄。在目錄中儲(chǔ)存有兩個(gè)文檔118和122。特別地,文檔118和122的名稱都是“Example.doc”,分別儲(chǔ)存在目錄116和124中,這兩個(gè)目錄的名稱分別為“Word”和“App4”。
在目錄層次中,目錄116是名稱為“Windows”的目錄114的子目錄,目錄114是目錄110的子目錄。類似地,目錄124是名稱為“VMS”的目錄126的子目錄,目錄126是目錄110的子目錄。目錄110被稱之為“根”目錄,原因在于,該目錄是所有其他目錄起源的目錄。在很多系統(tǒng)中,符號(hào)“/”用來(lái)指示根目錄。
當(dāng)按層次組織電子信息時(shí),根據(jù)通過(guò)分層結(jié)構(gòu)到包含該數(shù)據(jù)項(xiàng)的實(shí)體的“路徑”可以查找信息的每一數(shù)據(jù)項(xiàng)。在一個(gè)分層文件系統(tǒng)中,到數(shù)據(jù)項(xiàng)的路徑由根目錄開始,沿著目錄的層次結(jié)構(gòu)向下進(jìn)行,最終到達(dá)包含感興趣的數(shù)據(jù)項(xiàng)的目錄。例如,到文檔118的路徑依次包括目錄110、114、以及116。
分層存儲(chǔ)系統(tǒng)通常允許不同的數(shù)據(jù)項(xiàng)具有相同的名稱。例如,在圖1所示的文件系統(tǒng)中,文檔118和122的名稱都是“Example.doc”。從而,為了明確地識(shí)別給定文檔,除了文檔名稱之外還有其它要求。
一種用來(lái)識(shí)別和定位儲(chǔ)存在分層存儲(chǔ)系統(tǒng)中的信息的特定數(shù)據(jù)項(xiàng)的簡(jiǎn)便方法是通過(guò)使用“路徑名稱”。路徑名稱法是一種根據(jù)通過(guò)分層結(jié)構(gòu)到數(shù)據(jù)項(xiàng)的路徑來(lái)唯一識(shí)別數(shù)據(jù)項(xiàng)的簡(jiǎn)便方法。路徑名稱包括一序列名稱。在文件系統(tǒng)的情況下,在該名稱序列中的每個(gè)名稱都是“文件名”。術(shù)語(yǔ)“文件名”指的是目錄名稱和文檔的名稱,原因在于,目錄和文檔均被當(dāng)作“文件”。
在文件系統(tǒng)中,給定路徑名中的文件名序列開始于根目錄的名稱,包括沿著從根目錄到感興趣的數(shù)據(jù)項(xiàng)的路徑的所有目錄的名稱,結(jié)束于感興趣的數(shù)據(jù)項(xiàng)的名稱。通常,要遍歷的目錄列表使用某種分隔符號(hào)(例如,“/”、“\”、或“;”)連接起來(lái),以產(chǎn)生路徑名稱。因此,文檔118的路徑名稱是/Windows/Word/Example.doc,而文檔122的路徑名稱是/VMS/App4/Example.doc。
目錄(文件)及其所包含的內(nèi)容之間的關(guān)系隨著分層組織系統(tǒng)的類型的不同而顯著變化。在多種實(shí)施方式(例如Windows和DOS文件系統(tǒng))所采用的一種模式中,需要每個(gè)文件剛好具有一個(gè)父,形成樹狀結(jié)構(gòu)。在更復(fù)雜的模式中(例如在使用硬連接的UNIX文件系統(tǒng)中),分層結(jié)構(gòu)采用定向圖的形式,文件能夠具有多個(gè)父。
和用來(lái)組織電子信息的分層法相反,關(guān)系數(shù)據(jù)庫(kù)將信息儲(chǔ)存在由行和列組成的表中。通過(guò)唯一的RowID來(lái)識(shí)別每行。每列代表了記錄的屬性,每行代表了特定的記錄。通過(guò)向管理數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)提交查詢,從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)。查詢必須遵循數(shù)據(jù)庫(kù)管理系統(tǒng)支持的數(shù)據(jù)庫(kù)語(yǔ)言。結(jié)構(gòu)化查詢語(yǔ)言(SQL)是很多現(xiàn)有數(shù)據(jù)庫(kù)管理系統(tǒng)支持的數(shù)據(jù)庫(kù)語(yǔ)言的例子。
每種儲(chǔ)存系統(tǒng)都有優(yōu)點(diǎn)和缺點(diǎn)。分層組織的儲(chǔ)存系統(tǒng)簡(jiǎn)單、直觀、易于實(shí)現(xiàn),是多數(shù)應(yīng)用程序使用的標(biāo)準(zhǔn)模式。不幸地是,簡(jiǎn)單的分層組織沒有提供復(fù)雜數(shù)據(jù)檢索操作所需要的支持。例如,必須檢查每一目錄的內(nèi)容,從而檢索某天創(chuàng)建的具有特定文件名的所有文檔。由于必須搜索所有文件,分層組織不便于檢索過(guò)程。
關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)非常適于儲(chǔ)存大量的信息并以非常靈活的方式存取數(shù)據(jù)。相對(duì)于分層組織系統(tǒng)而言,即使符合復(fù)雜的搜索條件的數(shù)據(jù)也可容易并高效地從關(guān)系數(shù)據(jù)系統(tǒng)中檢索到。然而,定制并向數(shù)據(jù)庫(kù)服務(wù)器提交查詢的進(jìn)程卻沒有僅遍歷分層目錄直觀,并且超出了很多計(jì)算機(jī)用戶所掌握的技術(shù)程度。
過(guò)去,分層組織系統(tǒng)和關(guān)系組織系統(tǒng)以不同的相不兼容的方式實(shí)現(xiàn)。然而,通過(guò)一些額外程序,關(guān)系組織系統(tǒng)能夠模擬分層組織系統(tǒng)。當(dāng)需要關(guān)系系統(tǒng)的儲(chǔ)存能力和靈活性,同時(shí)又需要分層系統(tǒng)的直觀性和普遍性時(shí),尤其需要這種模擬。
通過(guò)實(shí)例說(shuō)明本發(fā)明,并非用于限制本發(fā)明,在附圖中,相同的標(biāo)號(hào)代表相同的部件,其中圖1示出分層文件系統(tǒng)的框圖;圖2示出和源相關(guān)聯(lián)的節(jié)點(diǎn)層次的框圖;圖3是根據(jù)本發(fā)明的實(shí)施例的能夠被用來(lái)捕捉圖2中示出的層次的關(guān)系表的框圖;圖4示出根據(jù)本發(fā)明的實(shí)施例的分層結(jié)構(gòu)和內(nèi)容結(jié)構(gòu)的框圖;圖5是關(guān)系表的框圖,其中通過(guò)儲(chǔ)存在相應(yīng)于葉節(jié)點(diǎn)的行中的值示出信息層次的非葉結(jié)點(diǎn);圖6是儲(chǔ)存在圖5的表中的數(shù)據(jù)隱含的層次的框圖;以及圖7是可以實(shí)施本發(fā)明的實(shí)施例的系統(tǒng)的框圖。
具體實(shí)施例方式
本發(fā)明描述了用于在關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)的結(jié)構(gòu)中儲(chǔ)存屬于信息層次的源的方法和系統(tǒng)。在以下的描述中,出于說(shuō)明目的,為了提供對(duì)本發(fā)明的透徹理解而闡明了許多具體細(xì)節(jié)。然而,很顯然,即使沒有這些特定細(xì)節(jié),本發(fā)明也能實(shí)施。在其它實(shí)例中,為了避免對(duì)本發(fā)明不必要的模糊,以方框圖示出已知結(jié)構(gòu)和裝置。
功能概述本發(fā)明提供了多種便于在關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)中管理分層數(shù)據(jù)的技術(shù)。根據(jù)一個(gè)實(shí)施例,將用來(lái)儲(chǔ)存屬于層次的源的存儲(chǔ)結(jié)構(gòu)(“內(nèi)容結(jié)構(gòu)(content structure)”)與用來(lái)儲(chǔ)存捕捉關(guān)于層次的數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)(“分層結(jié)構(gòu)(hierarchy structure)”)分開。
在一些情況下,在分層結(jié)構(gòu)之外維持的現(xiàn)有數(shù)據(jù)中已經(jīng)明確地和隱含地反映了層次。這樣的層次被稱作“先有層次”。在這些情況下,需要在分層結(jié)構(gòu)中捕捉先有層次,以便分層結(jié)構(gòu)可以被用作到源的可選訪問路徑。例如,根據(jù)路徑信息,可用分層結(jié)構(gòu)訪問源。而且,即使當(dāng)通過(guò)直接向內(nèi)容結(jié)構(gòu)發(fā)出查詢來(lái)訪問源時(shí),訪問操作也能獲得所有特征的益處,并訪問和分層結(jié)構(gòu)相關(guān)的結(jié)構(gòu),例如,任何安全機(jī)制和任何索引,安全機(jī)制內(nèi)建在分層結(jié)構(gòu)中,索引被建立以增強(qiáng)根據(jù)源在層次中的位置來(lái)訪問源的操作性能。
每個(gè)先有層次都與以下數(shù)據(jù)關(guān)聯(lián),(1)存在于分層結(jié)構(gòu)之外的數(shù)據(jù),以及(2)反映了先有層次的數(shù)據(jù)。這里將這樣的數(shù)據(jù)稱作“外部層次定義”。為了在分層結(jié)構(gòu)中捕捉先有層次,必須根據(jù)外部層次定義將數(shù)據(jù)(此處指的是“內(nèi)部層次定義”)添加到分層結(jié)構(gòu)中。
已經(jīng)捕捉先有層次后,還存在兩組反映層次的獨(dú)立數(shù)據(jù)外部層次定義和內(nèi)部層次定義。改變?nèi)我环N定義都改變了層次。由此,為了維持層次的一致性反映,響應(yīng)于對(duì)外部層次定義做出的改變,必須改變內(nèi)部層次定義。此處描述了用于維持兩種層次定義之間的一致性的多項(xiàng)技術(shù)。
在關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)中儲(chǔ)存分層數(shù)據(jù)圖2示出實(shí)例中使用的層次200的框圖,此處給出的實(shí)例是為了便于理解對(duì)本發(fā)明實(shí)施例。層次200包括八個(gè)節(jié)點(diǎn)。在該層次中最高等級(jí)的節(jié)點(diǎn)被稱作“根”節(jié)點(diǎn)。每個(gè)分支的末端的節(jié)點(diǎn)是“葉”節(jié)點(diǎn)。根節(jié)點(diǎn)和葉結(jié)點(diǎn)之間的節(jié)點(diǎn)是“中間”節(jié)點(diǎn)。在示意性層次中,節(jié)點(diǎn)1、2、以及3是中間節(jié)點(diǎn),節(jié)點(diǎn)4、5、6、以及7是葉節(jié)點(diǎn)。
在信息層次中,節(jié)點(diǎn)對(duì)應(yīng)于信息。通常,和每個(gè)節(jié)點(diǎn)相關(guān)聯(lián)的信息項(xiàng)將有某種形式的名稱和某種類型的內(nèi)容。例如,在相應(yīng)于分層文件系統(tǒng)的層次中,節(jié)點(diǎn)通常相應(yīng)于文件(這里,“文件夾”或“目錄”是文件的一種類型)。每個(gè)這樣的文件將具有名稱 以及某種形式的內(nèi)容。
在很多情況下,在層次中和節(jié)點(diǎn)相關(guān)的名稱不必是唯一的。在圖2示出的實(shí)例中,節(jié)點(diǎn)1和節(jié)點(diǎn)7都具有名稱“a”。盡管它們的名稱相同,但它們卻是分別的不同的節(jié)點(diǎn),在層次中占有不同的位置,與完全不同的內(nèi)容相關(guān)聯(lián)。
一種規(guī)格適用全部(ONE-SIZE-FITS-ALL)圖3是可用來(lái)代表關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)中的層次200的兩張表(源表302和鏈接表350)的框圖。源表302包括用于層次中的每個(gè)節(jié)點(diǎn)的行。用于給定結(jié)點(diǎn)的行包括與給定節(jié)點(diǎn)關(guān)聯(lián)的名稱以及和給定節(jié)點(diǎn)關(guān)聯(lián)的數(shù)據(jù)。例如,行304相應(yīng)于節(jié)點(diǎn)1,包含和節(jié)點(diǎn)1關(guān)聯(lián)的名稱“a”和數(shù)據(jù)306。源表302是一種規(guī)格適用全部的方法的實(shí)例,其中,在層次中用于所有數(shù)據(jù)源的數(shù)據(jù)被儲(chǔ)存在相同的結(jié)構(gòu)中,而不考慮這些源的數(shù)據(jù)類型。在源表302的實(shí)例中,用來(lái)儲(chǔ)存源數(shù)據(jù)內(nèi)容的數(shù)據(jù)結(jié)構(gòu)是單列308。用于該列的數(shù)據(jù)可以是例如LOB(Large Object,大對(duì)象)型的,諸如二進(jìn)制LOB(BLOB)或字符LOB(CLOB)。
鏈接表350包括用于層次200中的每對(duì)父-子關(guān)系的一行。父列378持有表示父-子關(guān)系的父的值,子列380持有表示父-子關(guān)系的子的值。例如,行352表示根節(jié)點(diǎn)是節(jié)點(diǎn)1的父。同樣,行354和行356分別表示節(jié)點(diǎn)1是節(jié)點(diǎn)2和節(jié)點(diǎn)3的父。
將分層結(jié)構(gòu)與內(nèi)容結(jié)構(gòu)分開表302和350以關(guān)系格式捕捉層次200的所有信息。但是,如果與層次200關(guān)聯(lián)的源數(shù)據(jù)的內(nèi)容使用由源表302代表的一種規(guī)格適用全部的方法儲(chǔ)存,則不可能完全利用關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)的能力。特別地,源表302包括用于將和節(jié)點(diǎn)關(guān)聯(lián)的資源內(nèi)容儲(chǔ)存在層次200中的單列。當(dāng)和節(jié)點(diǎn)關(guān)聯(lián)的源數(shù)據(jù)是簡(jiǎn)單的數(shù)據(jù)類型(例如,字符串或整型)時(shí),這樣的儲(chǔ)存格式是足夠用的。但是,在很多情況下,在層次中和節(jié)點(diǎn)關(guān)聯(lián)的源數(shù)據(jù)是復(fù)雜的數(shù)據(jù)類型,例如,復(fù)雜記錄或XML文檔。在這樣的情況下,源數(shù)據(jù)在單列中儲(chǔ)存制約了用戶對(duì)內(nèi)容進(jìn)行復(fù)雜搜索的能力。即使當(dāng)該數(shù)據(jù)庫(kù)系統(tǒng)提供了對(duì)在單列中搜索復(fù)雜的源數(shù)據(jù)分量的支持時(shí),這樣的搜索性能也會(huì)受到損害。
根據(jù)本發(fā)明的一個(gè)實(shí)施例,通過(guò)將和節(jié)點(diǎn)相關(guān)聯(lián)的源內(nèi)容和捕捉分層信息的表分開儲(chǔ)存,克服了與儲(chǔ)存和搜索屬于信息層次的復(fù)雜源數(shù)據(jù)相關(guān)的問題。
例如,圖4示出了與源表302類似的源表402。然而,源表402和源表302的不同之處在于源表402不再在每個(gè)源數(shù)據(jù)的行中儲(chǔ)存該源數(shù)據(jù)的內(nèi)容。當(dāng)然,源表302中的DATA列被源表402中的DATA TYPE列以及DATA REF列這兩列代替。
對(duì)于源表402中的每行,DATA TYPE列儲(chǔ)存指示和在行中識(shí)別的節(jié)點(diǎn)相關(guān)聯(lián)的源類型的數(shù)據(jù)。例如,行404相應(yīng)于層次200的節(jié)點(diǎn)1。行404的DATA TYPE列示出和節(jié)點(diǎn)1關(guān)聯(lián)的源的類型為T1。同樣,行406相應(yīng)于節(jié)點(diǎn)3,且行406的DATA TYPE列指示和節(jié)點(diǎn)3相關(guān)聯(lián)的源的類型為T5。
對(duì)于源表402的每行,DATA REF列儲(chǔ)存著和在行中識(shí)別的節(jié)點(diǎn)相關(guān)聯(lián)的源的參考信息。如此處使用的,術(shù)語(yǔ)“參考”通常指在數(shù)據(jù)系統(tǒng)中用來(lái)定位其他數(shù)據(jù)的任何數(shù)據(jù)。例如,DATA REF列能夠儲(chǔ)存指針、或更復(fù)雜的信息,諸如Oracle數(shù)據(jù)庫(kù)系統(tǒng)支持的“ref”數(shù)據(jù)類型。本發(fā)明并不限于用于定位和層次中的節(jié)點(diǎn)相關(guān)聯(lián)的源的任何特定類型的數(shù)據(jù)。
與分層結(jié)構(gòu)分開儲(chǔ)存源內(nèi)容有很多益處,分層結(jié)構(gòu)用來(lái)捕捉并反映源數(shù)據(jù)之間的層次關(guān)系。例如,由于源數(shù)據(jù)與源表402分開儲(chǔ)存,所以可以根據(jù)源數(shù)據(jù)的屬性定義其中儲(chǔ)存有源數(shù)據(jù)的內(nèi)容結(jié)構(gòu)。例如,和節(jié)點(diǎn)1關(guān)聯(lián)的源數(shù)據(jù)是雇員記錄,該源數(shù)據(jù)被儲(chǔ)存在具有用于每一雇員記錄字段的列的表450中。另一方面,和節(jié)點(diǎn)3關(guān)聯(lián)的源數(shù)據(jù)是公司記錄,該源數(shù)據(jù)被儲(chǔ)存在具有用于每一公司記錄字段的列的表456中。
另外,因?yàn)榉謱咏Y(jié)構(gòu)(例如,表402和350)和內(nèi)容結(jié)構(gòu)(例如,表450和456)分開,所以可以為現(xiàn)有的關(guān)系數(shù)據(jù)建立分層體系,對(duì)數(shù)據(jù)容量的影響很小,并且不需要改變用于訪問該數(shù)據(jù)的現(xiàn)有詢問。例如,員工表450可以在決定將信息安排進(jìn)層次200很早之前就已經(jīng)存在。同樣,在決定之前,可以已經(jīng)為訪問表450已經(jīng)定義了很多詢問和視圖。因?yàn)槟軌騽?chuàng)建表350和402而不影響表450的現(xiàn)有結(jié)構(gòu),可以建立用于層次200的含有儲(chǔ)存在表450中的資源的分層結(jié)構(gòu),而不需要訪問表450或用于改變表450現(xiàn)存查詢和視圖。
根據(jù)一個(gè)實(shí)施例,可以以使用用于一些資源的一種規(guī)格適用全部的方法來(lái)實(shí)現(xiàn)資源表402,資源表402還包括對(duì)其他資源內(nèi)容的參考。例如,雖然和節(jié)點(diǎn)1關(guān)聯(lián)的資源內(nèi)容可以被儲(chǔ)存在表450中,但是,和節(jié)點(diǎn)2關(guān)聯(lián)的資源內(nèi)容可以繼續(xù)儲(chǔ)存在表402的單個(gè)的LOB列中。資源的數(shù)據(jù)類型,如在DATA TYPE列中示出的,可以被數(shù)據(jù)庫(kù)服務(wù)器用作確定是否在資源表402的LOB列或一個(gè)或多個(gè)分離的表中儲(chǔ)存資源內(nèi)容的一個(gè)因素。
先前存在的層次表450最初就可以完全孤立于分層結(jié)構(gòu)存在,諸如資源表402和鏈接表350。因此,分層結(jié)構(gòu)最初沒有捕捉關(guān)于表450中的數(shù)據(jù)可以屬于的任何數(shù)據(jù)結(jié)構(gòu)的任何信息。然而,儲(chǔ)存在這樣的分層結(jié)構(gòu)外部的信息可以明確地或隱含地在表450的各行之間建立層次。
在表450的情況下,通過(guò)包含在EMD_ID和MANAGER列中的信息隱含地建立這樣的層次。特別地,表450的EMD_ID和MANAGER列中的數(shù)據(jù)建立一隱含的“管理層次”,其中和emp_id1關(guān)聯(lián)的員工直接在和emp_id 3關(guān)聯(lián)的員工之下;和emp_id 2關(guān)聯(lián)的員工直接在和emp_id 1關(guān)聯(lián)的員工之下;以及和emp_id 3關(guān)聯(lián)的員工沒有任何管理者(從而是管理層次的根節(jié)點(diǎn))。
在現(xiàn)在的實(shí)例中,管理層次是先前存在的層次且儲(chǔ)存在EMD_ID和MANAGER列中的數(shù)據(jù)包括外部層次定義。根據(jù)管理層次,使用分層結(jié)構(gòu)訪問表450中的數(shù)據(jù),必須在分層表中捕捉關(guān)于管理層次的信息。用于捕捉關(guān)于先前存在的數(shù)據(jù)結(jié)構(gòu)的信息的多種技術(shù)將在此后作詳細(xì)描述。
捕捉先前存在的層次根據(jù)一個(gè)實(shí)施例,捕捉先前存在的層次信息涉及(1)在源表中儲(chǔ)存一列用于先前存在的層次中的每個(gè)節(jié)點(diǎn),以及(2)在分層結(jié)構(gòu)(例如,分層索引)中儲(chǔ)存捕捉先前存在的層次的節(jié)點(diǎn)之間的父-子關(guān)系的信息。另外,如果先前存在的層次被嫁接進(jìn)已經(jīng)在分層結(jié)構(gòu)中反映的較大的層次中,那么,必須將元數(shù)據(jù)增加到分層結(jié)構(gòu)中,以將先前存在的層次的根節(jié)點(diǎn)建立為較大數(shù)據(jù)結(jié)構(gòu)中的節(jié)點(diǎn)的子。
執(zhí)行以下任務(wù)的操作是相當(dāng)直接的(1)在資源表中儲(chǔ)存用于先前存在的層次中的每個(gè)節(jié)點(diǎn)的行,以及(2)將用于嫁接先前存在的層次的節(jié)點(diǎn)的元數(shù)據(jù)增加給較大的層次。另一方面,根據(jù)外部層次定義的屬性,可以改變用于捕捉先前存在的層次的節(jié)點(diǎn)之間的父-子關(guān)系的技術(shù)。例如,如果SQL關(guān)系定義父-子關(guān)系,那么,采用使用合適的connect-by子句的SQL命令可以捕捉父-子信息。作為選擇,如果根據(jù)層次相關(guān)的字段,父-子關(guān)系是隱含的,那么,采用列舉法可以捕捉父-子信息。將在下面詳細(xì)描述connect-by和列舉法。
先前存在的層次的自動(dòng)捕捉根據(jù)一個(gè)實(shí)施例,數(shù)據(jù)庫(kù)被配置,以響應(yīng)于接收關(guān)于先前存在的層次的某種信息,自動(dòng)執(zhí)行先前存在層次捕捉操作。具體而言,根據(jù)一個(gè)實(shí)施例,數(shù)據(jù)庫(kù)被配置,以響應(yīng)于接收(1)用于識(shí)別和先前存在的層次關(guān)聯(lián)的內(nèi)容結(jié)構(gòu)的信息和(2)用于指示在特定內(nèi)容結(jié)構(gòu)中包含的資源之間建立父-子關(guān)系的標(biāo)準(zhǔn)的連接標(biāo)準(zhǔn),自動(dòng)地執(zhí)行先前存在的層次捕捉操作。
出于說(shuō)明目的,假定希望捕捉和表450關(guān)聯(lián)的管理層次。在這種情況下,響應(yīng)于接收(1)識(shí)別表450的數(shù)據(jù)和(2)指示表450的給定行是EMD_ID等同于在給定行中規(guī)定的MANAGER的行的子,能夠執(zhí)行自動(dòng)捕捉操作??梢愿鶕?jù)這一信息用來(lái)自動(dòng)捕捉先前存在的層次的技術(shù)將在下面描述。
使用CONNET BY捕捉父-子關(guān)系如前邊所提到的,一些先前存在的層次的父-子關(guān)系由SQL關(guān)系示出。例如,通過(guò)包含在表450的MANAGER列中的數(shù)據(jù)建立表450中的記錄的管理層次。在這種情況下,先前存在的層次的父-子關(guān)系可以通過(guò)使用采用合適的CONNECT BY子句的數(shù)據(jù)庫(kù)命令來(lái)捕捉。
例如,管理層次的自動(dòng)捕捉操作通過(guò)以下動(dòng)作執(zhí)行(1)在資源表402中創(chuàng)建行,以代表對(duì)應(yīng)于表450中的行的節(jié)點(diǎn);以及(2)通過(guò)執(zhí)行包括CONNECT BY子句的SQL語(yǔ)句產(chǎn)生關(guān)于那些節(jié)點(diǎn)之間的分層關(guān)系的元數(shù)據(jù)。資源表402中代表用于表450的特定行的節(jié)點(diǎn)的每行都具有對(duì)該特定行的參考。例如,資源表402的行404代表用于表450的行420的節(jié)點(diǎn),從而包括對(duì)行420的參考。
關(guān)于生成和先前存在的層次相關(guān)聯(lián)的路徑信息,假設(shè)表450被命名為‘EMP’并被定義以包括下述列(emp_id integer,first_namevarchar2(80),last_name varchar2(80),age integer,manager integer)。在這些情況下,使用CONNECT BY關(guān)系(例如,‘START WITHmanager IS NULL CONNECT BY PRIOR manager=emp_id’)生成條目樹(根據(jù)數(shù)據(jù),可變深度)。在這種情況下,用戶通常也能夠指定列值以用作路徑元素的名稱(即‘first_name’)。
使用列舉法捕捉先前存在的層次在一些情況下,可以通過(guò)相互具有層次關(guān)系的字段隱含定義先前存在的層次。例如,考慮包含一個(gè)許諾銷售的產(chǎn)品列表的關(guān)系表。例如,這樣的關(guān)系表可以如下定義CREATE TABLE PRODUCT_INFO(manufacturer VARCHAR2(128)product_type VARCHAR2(48)product_name VARCHAR2(80)sku NUMBER);這樣的表可被填充,例如,如圖5中的表500所示出的。在該實(shí)例中,層次被隱含在MANUFACTURER、PRODUCT_TYPE、PRODUCT_NAME、以及SKU字段之間的分層關(guān)系中。特別地,每個(gè)SKU值是和特定的PRODUCT_NAME值關(guān)聯(lián)的很多潛在的SKU值中的一個(gè)。每個(gè)PRODUCT_NAME值是和特定的PRODUCT_TYPE值關(guān)聯(lián)的很多潛在的PRODUCT_NAME值中的一個(gè)。每個(gè)PRODUCT_TYPE值是和特定的MANUFACTURER值關(guān)聯(lián)的很多潛在的PRODUCT_TYPE值中的一個(gè)。
在表500包含的值中隱含的“產(chǎn)品目錄層次”由圖6說(shuō)明。參看圖6,表500的四個(gè)分層相關(guān)字段中的每個(gè)都對(duì)應(yīng)于分層等級(jí),其中,MANUFACTURER字段是最高等級(jí)(僅在根節(jié)點(diǎn)之下),SKU字段是最低等級(jí)(代表“葉”節(jié)點(diǎn))。
當(dāng)以這種方式定義先前存在的層次時(shí),可以使用列舉法來(lái)捕捉父-子關(guān)系。特別地,包含卷入層次中的列舉值的一列或多列被用來(lái)生成“資源集節(jié)點(diǎn)(collection node)”。每列的每個(gè)值都是在層次的某一深度的新“資源集”,每列都被用于層次的新等級(jí)。最后給出的列被當(dāng)作文件,而非資源集。
特別地,通過(guò)對(duì)包含在MANUFACTURER列中的值執(zhí)行DISTINCT操作,可以建立層次的第一等級(jí)中的節(jié)點(diǎn)。通過(guò)連接用于所有行的MANUFACTURER和PRODUCT_TYPE值,并對(duì)連接后的產(chǎn)生的值執(zhí)行DISTINCT操作,可以建立層次的第二等級(jí)中的節(jié)點(diǎn)。同樣,通過(guò)連接用于所有行的MANUFACTURER、PRODUCT_TYPE、以及PRODUCT_NAME值,并對(duì)連接后的產(chǎn)生的值執(zhí)行DISTINCT操作,可以建立層次的第三等級(jí)中的節(jié)點(diǎn)。最后,通過(guò)連接用于所有行的MANUFACTURER、PRODUCT_TYPE、PRODUCT_NAME、以及SKU值,并對(duì)連接后的產(chǎn)生的值執(zhí)行DISTINCT操作,可以建立層次的葉等級(jí)。
假設(shè)給定等級(jí)的節(jié)點(diǎn)的名稱并不是唯一的,執(zhí)行上述的連接操作。例如,假設(shè)PRODUCT_TYPE值PD1的產(chǎn)品能夠具有和PRODUCT_TYPE值PD2的產(chǎn)品相同的名稱。然而,如果PRODUCT_NAME列的名稱被要求是唯一的,那么,可以通過(guò)對(duì)PRODUCT_NAME列的值簡(jiǎn)單地執(zhí)行DISTINCT操作,獲得在層次的PRODUCT_NAME級(jí)的節(jié)點(diǎn)。
應(yīng)當(dāng)注意,通過(guò)儲(chǔ)存在容納用于節(jié)點(diǎn)的資源的關(guān)系表行中的值代表每個(gè)葉節(jié)點(diǎn)的相關(guān)路徑名稱。例如,行502(圖5)容納用于節(jié)點(diǎn)602(圖6)的資源和對(duì)應(yīng)于相關(guān)路徑/MF1/PD2/PN3/SKU3的行502的列中的值。因此,當(dāng)尋找特定節(jié)點(diǎn)(例如MF1/FD2)的子時(shí),用于該節(jié)點(diǎn)的列被隱含地用來(lái)選擇子(因此,用來(lái)尋找MF1/PD2的子的SQL將是‘SELECT FROM PRODUCT_INFO WHEREmanufacture=‘MF1’and‘product_type’=‘PD2”)。
維持一致性如上所述,在先前存在的層次已經(jīng)被捕捉后,存在反映該層次的兩組獨(dú)立數(shù)據(jù)外部層次定義和內(nèi)部層次定義。為了維持層次的一致性反映,響應(yīng)于對(duì)外部層次做出的改變,必須修改內(nèi)部層次定義。
例如,一旦捕捉,和表450關(guān)聯(lián)的管理層次反映在(1)儲(chǔ)存在分層結(jié)構(gòu)的數(shù)據(jù)和(2)表450的EMP_ID列中的數(shù)據(jù)和表450的MANAGER列中的數(shù)據(jù)之間的關(guān)系中。因此,對(duì)管理層次的改變可以通過(guò)以下方式完成(1)改變表450的EMP_ID或MANAGER列中的值或(2)改變分層結(jié)構(gòu)中的值。為了維持分層結(jié)構(gòu)中的數(shù)據(jù)和EMP_ID或MANAGER列中的數(shù)據(jù)的一致性,需要建立機(jī)制,使得對(duì)一組數(shù)據(jù)的改變會(huì)自動(dòng)引起對(duì)另一組數(shù)據(jù)的相應(yīng)修改。
根據(jù)一個(gè)實(shí)施例,改變表450,以做出作為對(duì)資源表402的巡視的一部分的某些檢查(例如,安全性檢查),也可以做出這些檢查用于遍歷表450。在表450上創(chuàng)建數(shù)據(jù)操縱語(yǔ)言(Data ManipulationLanguage,DML)觸發(fā)器,以便對(duì)表450進(jìn)行的插入、更新、或刪除操作在分層結(jié)構(gòu)的數(shù)據(jù)中反映。例如,如果需要?jiǎng)h除表450中的行,則檢查確保將被刪除的行不會(huì)引起任何“懸空行(danglingrows)”。例如,在管理層次中,和行420關(guān)聯(lián)的節(jié)點(diǎn)是和行422關(guān)聯(lián)的節(jié)點(diǎn)的父。因此,刪除行420將使行422和管理層次分開,從而造成行422“懸空”。因?yàn)閼铱盏男胁辉偈菍哟蔚囊徊糠?,刪除行422將導(dǎo)致從分層結(jié)構(gòu)中刪除和行420及行422相關(guān)的數(shù)據(jù)。
同樣,當(dāng)將行插入表450時(shí),分層結(jié)構(gòu)的信息將被更新從而為創(chuàng)建的新路徑增加一個(gè)條目。注意,當(dāng)插入新行時(shí),則可能允許訪問此前不能訪問的子樹。例如,假設(shè)刪除行420后,再次插入行420。通過(guò)插入行420,行422被隱含地嫁接回管理層次。因此,行420的插入導(dǎo)致分層結(jié)構(gòu)中的數(shù)據(jù)被更新,以包含用于行420和行422的節(jié)點(diǎn)和路徑。
為維持內(nèi)部層次定義和外部層次定義之間的一致性,需要執(zhí)行精確的操作,這些精確的操作隨多種因素而變化。必須做出什么行動(dòng)的影響以維持一致性的一種因素是外部層次定義的屬性。例如,根據(jù)SQL關(guān)系對(duì)表450應(yīng)用管理層次,而根據(jù)列舉對(duì)表500應(yīng)用管理層次。當(dāng)刪除和管理層次中的葉節(jié)點(diǎn)關(guān)聯(lián)的行時(shí),通常,相應(yīng)于該節(jié)點(diǎn)的資源表中的行也將被刪除。然而,如果刪除和產(chǎn)品目錄層次的葉節(jié)點(diǎn)關(guān)聯(lián)的行,則(1)刪除資源表中相應(yīng)于該節(jié)點(diǎn)的行,以及(2)確定被刪除的葉節(jié)點(diǎn)的父是否有任何剩余的子。如果被刪除的葉節(jié)點(diǎn)的父沒有任何剩余的子。則刪除資源表中相應(yīng)于該節(jié)點(diǎn)的行。如果刪除相應(yīng)于父節(jié)點(diǎn)的行,則確定該父節(jié)點(diǎn)的父是否有任何剩余的子。如果該父節(jié)點(diǎn)的父沒有任何剩余的子,則同樣刪除資源表的和父節(jié)點(diǎn)的父相關(guān)聯(lián)的行。重復(fù)這一過(guò)程,刪除所有無(wú)子非葉節(jié)點(diǎn)。
同樣,對(duì)于涉及刪除表中的所有行的丟棄和截尾操作,執(zhí)行類似于上述用于刪除操作的用于維持一致性的操作。
在上述實(shí)例中,DML觸發(fā)器根據(jù)在內(nèi)容結(jié)構(gòu)上執(zhí)行的插入、更新、以及刪除操作執(zhí)行對(duì)分層結(jié)構(gòu)中的數(shù)據(jù)的更改。可以實(shí)現(xiàn)例如“INSTEAD OF”觸發(fā)器的DML觸發(fā)器。然而,為了保證一致性,同樣必須創(chuàng)建觸發(fā)器以保證對(duì)層次中的數(shù)據(jù)進(jìn)行的插入、更新、以及刪除操作導(dǎo)致對(duì)內(nèi)容結(jié)構(gòu)中的數(shù)據(jù)進(jìn)行相應(yīng)的操作。
硬件概述圖7是一個(gè)描述了實(shí)現(xiàn)本發(fā)明的具體實(shí)施例的計(jì)算機(jī)系統(tǒng)700的框圖。計(jì)算機(jī)系統(tǒng)700包括總線702或其它用于傳送信息的通信裝置,以及與總線702連接用于處理信息的處理器704。計(jì)算機(jī)系統(tǒng)700還包括一個(gè)主存儲(chǔ)器706,例如隨機(jī)存取存儲(chǔ)器(RAM)或其它動(dòng)態(tài)存儲(chǔ)設(shè)備,與總線702連接,用于儲(chǔ)存信息和將被處理器704執(zhí)行的指令。主存儲(chǔ)器706也可以被用來(lái)儲(chǔ)存臨時(shí)變量或在處理器704執(zhí)行指令的過(guò)程中產(chǎn)生的中間變量。計(jì)算機(jī)系統(tǒng)700還包括和總線702相連的只讀存儲(chǔ)器(ROM)708或者其它靜態(tài)存儲(chǔ)設(shè)備,用于儲(chǔ)存靜態(tài)信息和用于處理器704的指令。提供了存儲(chǔ)設(shè)備710,例如磁盤或光盤,連接至總線702,用于儲(chǔ)存信息和指令。
計(jì)算機(jī)系統(tǒng)700可以通過(guò)總線702連接至顯示器712(例如陰極射線管(CRT)),用于顯示信息給計(jì)算機(jī)用戶。一包括字母和數(shù)字以及其它鍵的輸入裝置714,連接至總線702,用于將信息和指令選擇傳送給處理器704。另一種類型的用戶輸入裝置是光標(biāo)控制器716,例如鼠標(biāo)、軌跡球、或者光標(biāo)方向鍵,用于傳送方向信息和命令選擇給處理器704,并用于控制光標(biāo)在顯示器712上的移動(dòng)。輸入裝置通常具有兩個(gè)軸的兩個(gè)自由度,一個(gè)是第一軸(例如x),一個(gè)是第二軸(例如y),這就允許該裝置在平面上確定位置。
本發(fā)明涉及計(jì)算機(jī)系統(tǒng)700的應(yīng)用,用于實(shí)施此處所描述的技術(shù)。根據(jù)本發(fā)明的一個(gè)實(shí)施例,響應(yīng)于執(zhí)行包含在主存儲(chǔ)器706中的一個(gè)或多個(gè)序列的一個(gè)或多個(gè)指令的處理器704,可以通過(guò)計(jì)算機(jī)系統(tǒng)700實(shí)現(xiàn)這些技術(shù)。這些指令可以從另一計(jì)算機(jī)可讀介質(zhì)(例如存儲(chǔ)裝置710)讀到主存儲(chǔ)器706中。執(zhí)行包含在主存儲(chǔ)器706中的指令序列,使處理器704執(zhí)行此處描述的處理步驟。在可選實(shí)施例中,硬件連接電路可以被用來(lái)代替或與軟件指令結(jié)合來(lái)實(shí)現(xiàn)該發(fā)明。因此,本發(fā)明的實(shí)施例不被限制在任何特定的硬件電路與軟件的結(jié)合中。
在這里用到的術(shù)語(yǔ)“計(jì)算機(jī)可讀介質(zhì)”指的是參與提供指令給處理器704用于執(zhí)行的任何介質(zhì)。這樣的介質(zhì)可能有多種形式,包括但不限于非易失性介質(zhì)、易失性介質(zhì)、傳輸介質(zhì)等。非易失性介質(zhì)舉例來(lái)說(shuō)包括光盤或磁盤,如存儲(chǔ)設(shè)備710。易失性介質(zhì)舉例來(lái)說(shuō)包括動(dòng)態(tài)存儲(chǔ)器,例如主存儲(chǔ)器706。傳輸介質(zhì)包括同軸電纜、銅線、或光纖,也包括構(gòu)成總線702的布線。傳輸介質(zhì)也可以采用聲波或光波的形式,例如無(wú)線電波中產(chǎn)生的聲波和紅外數(shù)據(jù)通信中的光波。
計(jì)算機(jī)可讀介質(zhì)的通常形式舉例來(lái)說(shuō)包括軟盤、軟磁盤、硬盤、磁帶、或其它任何磁性介質(zhì)、CD-ROM、其它任何光學(xué)介質(zhì)、穿孔卡片、紙帶、其它任何具有孔圖案的物理介質(zhì)、只讀存儲(chǔ)器(RAM)、可編程只讀存儲(chǔ)器(PROM)、以及可擦寫可編程只讀存儲(chǔ)器(EPROM)、閃存(FLASH-EPROM)、任何其它記憶芯片或卡式磁帶、下文所述的載波信號(hào)、或者其它任何計(jì)算機(jī)可以讀取的介質(zhì)。
各種形式的計(jì)算機(jī)可讀介質(zhì)都可以被用來(lái)將一個(gè)或多個(gè)序列的一個(gè)或多個(gè)指令傳送給處理器704用于執(zhí)行。例如,指令首先裝載到遠(yuǎn)端計(jì)算機(jī)的磁盤上。這臺(tái)遠(yuǎn)端計(jì)算機(jī)可能把這些指令加載到其動(dòng)態(tài)存儲(chǔ)器中,通過(guò)調(diào)制解調(diào)器在電話線上傳送指令。計(jì)算機(jī)系統(tǒng)700本地的調(diào)制解調(diào)器能夠通過(guò)電話線接收數(shù)據(jù),并使用紅外發(fā)射器把數(shù)據(jù)轉(zhuǎn)換成紅外信號(hào)。紅外探測(cè)器可以接收紅外信號(hào)中攜帶的數(shù)據(jù),合適的電路可以把數(shù)據(jù)傳到總線702上去??偩€702把數(shù)據(jù)加載到主存儲(chǔ)器706中,處理器704再?gòu)闹鞔鎯?chǔ)器中取回?cái)?shù)據(jù)并執(zhí)行指令。主存儲(chǔ)器706接收到的指令可以在處理器704執(zhí)行前或執(zhí)行后有選擇地儲(chǔ)存在存儲(chǔ)設(shè)備710上。
計(jì)算機(jī)系統(tǒng)700還包括一個(gè)與總線702相連的通信接口718。通信接口718提供了一種與連接到局域網(wǎng)絡(luò)722的網(wǎng)絡(luò)鏈路720的雙向數(shù)據(jù)通信。例如,通信接口718可以是綜合服務(wù)數(shù)字網(wǎng)(ISDN)卡,或者是調(diào)制解調(diào)器,向相應(yīng)類型的電話線提供數(shù)據(jù)通信連接。作為另一實(shí)例,通信接口718可以是局域網(wǎng)(LAN)卡,提供到兼容的局域網(wǎng)的數(shù)據(jù)通信連接。也可以實(shí)現(xiàn)無(wú)線連接。在任何實(shí)現(xiàn)方式中,通信接口718都能夠發(fā)送和接收電信號(hào),電磁信號(hào)、或光信號(hào),這些信號(hào)承載著代表各種信息的數(shù)字?jǐn)?shù)據(jù)流。
網(wǎng)絡(luò)鏈路720一般通過(guò)一個(gè)或多個(gè)網(wǎng)絡(luò)向其它數(shù)據(jù)設(shè)備提供數(shù)據(jù)通信。例如,網(wǎng)絡(luò)鏈路720可以提供通過(guò)局域網(wǎng)722至主機(jī)724或由互聯(lián)網(wǎng)服務(wù)提供商(ISP)726操作的數(shù)據(jù)裝置的連接。ISP 726反過(guò)來(lái)又通過(guò)萬(wàn)維分組數(shù)據(jù)通信網(wǎng)絡(luò),現(xiàn)在通常稱為“互聯(lián)網(wǎng)”728,提供數(shù)據(jù)通信服務(wù)。局域網(wǎng)722和互聯(lián)網(wǎng)728都使用承載數(shù)字?jǐn)?shù)據(jù)流的電信號(hào)、電磁信號(hào)、或光學(xué)信號(hào)。經(jīng)過(guò)各種網(wǎng)絡(luò)的信號(hào)、網(wǎng)絡(luò)鏈路720上的信號(hào)、以及經(jīng)過(guò)通信接口718的信號(hào),承載著送到和來(lái)自計(jì)算機(jī)系統(tǒng)700的數(shù)字?jǐn)?shù)據(jù),是傳輸信息的載波的示范形式。
計(jì)算機(jī)系統(tǒng)700可以通過(guò)網(wǎng)絡(luò)、網(wǎng)絡(luò)鏈路720、以及通信接口718發(fā)送消息和接收數(shù)據(jù),包括程序代碼。在互聯(lián)網(wǎng)實(shí)例中,服務(wù)器730可以通過(guò)互聯(lián)網(wǎng)728、ISP 726、局域網(wǎng)722、和通信接口718傳送被請(qǐng)求的應(yīng)用程序代碼。
當(dāng)接收到代碼后,接收到的代碼可以由處理器704執(zhí)行,或儲(chǔ)存在存儲(chǔ)裝置710或其他非易失性存儲(chǔ)器中用于隨后執(zhí)行。以這種方式,計(jì)算機(jī)系統(tǒng)700可以獲得載波形式的應(yīng)用代碼。
在上述說(shuō)明書中,已經(jīng)參考具體實(shí)施例說(shuō)明了本發(fā)明。然而,顯然可以對(duì)其做出各種變化和改變,而不背離本發(fā)明寬廣的精神和范圍。因此,說(shuō)明書和附圖僅用來(lái)說(shuō)明而非限定本發(fā)明。
權(quán)利要求
1.一種用于管理數(shù)據(jù)庫(kù)系統(tǒng)中的數(shù)據(jù)的方法,包括以下步驟接收用于識(shí)別儲(chǔ)存有屬于信息層次的資源的一個(gè)或多個(gè)關(guān)系表的數(shù)據(jù),其中所述一個(gè)或多個(gè)關(guān)系表中的某種數(shù)據(jù)起到在所述資源之間建立層次關(guān)系的外部層次定義的作用;通過(guò)執(zhí)行以下步驟,捕捉所述層次中的層次關(guān)系執(zhí)行相對(duì)于所述一個(gè)或多個(gè)關(guān)系表的一個(gè)或多個(gè)查詢,以檢索所述某種數(shù)據(jù);以及根據(jù)所述某種數(shù)據(jù),在從所述一個(gè)或多個(gè)關(guān)系表中分離出來(lái)的一個(gè)或多個(gè)層次結(jié)構(gòu)中儲(chǔ)存作為內(nèi)部層次定義的用于捕捉所述信息層次的信息。
2.根據(jù)權(quán)利要求1所述的方法,其中,所述儲(chǔ)存用于捕捉所述信息層次的信息的步驟包括在資源表中儲(chǔ)存用于所述信息層次中的每個(gè)節(jié)點(diǎn)的行。
3.根據(jù)權(quán)利要求1所述的方法,其中,所述儲(chǔ)存用于捕捉所述信息層次的信息的步驟包括在一個(gè)或多個(gè)層次結(jié)構(gòu)中儲(chǔ)存表示所述資源之間的父-子關(guān)系的信息。
4.根據(jù)權(quán)利要求1所述的方法,其中所述信息層次中的資源相應(yīng)于關(guān)系表中的行;以及用儲(chǔ)存在所述關(guān)系表的兩個(gè)或更多個(gè)列中的值表示所述資源之間的父-子關(guān)系。
5.根據(jù)權(quán)利要求4所述的方法,其中,所述執(zhí)行一個(gè)或多個(gè)查詢的步驟包括執(zhí)行用于指定所述兩個(gè)或更多個(gè)列之間的CONNECT BY關(guān)系的查詢。
6.根據(jù)權(quán)利要求5所述的方法,其中所述兩個(gè)或更多個(gè)列包括含有用于表示關(guān)系中的子的數(shù)據(jù)的第一列和含有用于表示所述關(guān)系中的父的數(shù)據(jù)的第二列;以及所述執(zhí)行查詢的步驟包括執(zhí)行包含如下表述形式的查詢START WITH x IS NULL CONNECT BY PRIOR x=y(tǒng);其中,x代表所述第二列,y代表所述第一列。
7.根據(jù)權(quán)利要求1所述的方法,其中和所述信息層次中的葉節(jié)點(diǎn)關(guān)聯(lián)的資源相應(yīng)于關(guān)系表的行;以及將在所述信息層次中與位于給定葉節(jié)點(diǎn)之上的非葉節(jié)點(diǎn)相關(guān)聯(lián)的值儲(chǔ)存在相應(yīng)于所述給定葉節(jié)點(diǎn)的行中。
8.根據(jù)權(quán)利要求7所述的方法,其中將所述和非葉節(jié)點(diǎn)關(guān)聯(lián)的值儲(chǔ)存在所述關(guān)系表的一個(gè)或多個(gè)列中;以及所述儲(chǔ)存用于捕捉所述信息層次的信息的步驟包括在資源表中將來(lái)自相應(yīng)于所述信息層次的葉節(jié)點(diǎn)的行的用于每個(gè)不同值的行儲(chǔ)存到所述一個(gè)或多個(gè)列中。
9.根據(jù)權(quán)利要求1所述的方法,還包括以下步驟建立觸發(fā)器,以響應(yīng)于對(duì)構(gòu)成所述外部層次定義的數(shù)據(jù)做出的改變,更新構(gòu)成所述內(nèi)部層次定義的數(shù)據(jù)。
10.根據(jù)權(quán)利要求1所述的方法,還包括以下步驟建立觸發(fā)器,以響應(yīng)于對(duì)構(gòu)成所述內(nèi)部層次定義的數(shù)據(jù)做出的改變,更新構(gòu)成所述外部層次定義的數(shù)據(jù)。
11.根據(jù)權(quán)利要求1所述的方法,還包括自動(dòng)維持所述外部層次定義和所述內(nèi)部層次定義之間的一致性的步驟。
12.根據(jù)權(quán)利要求11所述的方法,其中所述自動(dòng)維持一致性的步驟包括以下步驟檢測(cè)對(duì)所述一個(gè)或多個(gè)表的操作何時(shí)刪除和所述信息層次中的節(jié)點(diǎn)關(guān)聯(lián)的資源;響應(yīng)于檢測(cè)所述操作,自動(dòng)執(zhí)行以下步驟在資源表中刪除相應(yīng)于所述節(jié)點(diǎn)的行;確定從所述信息層次中除去所述節(jié)點(diǎn)是否導(dǎo)致一個(gè)或多個(gè)其他節(jié)點(diǎn)懸空;以及如果從所述信息層次中除去所述節(jié)點(diǎn)導(dǎo)致一個(gè)或多個(gè)其他節(jié)點(diǎn)懸空,那么,在所述資源表中刪除相應(yīng)于所述一個(gè)或多個(gè)其他節(jié)點(diǎn)的行。
13.根據(jù)權(quán)利要求11所述的方法,其中所述自動(dòng)維持一致性的步驟包括以下步驟檢測(cè)對(duì)所述一個(gè)或多個(gè)表的操作何時(shí)刪除和所述信息層次中的葉節(jié)點(diǎn)關(guān)聯(lián)的資源;響應(yīng)于檢測(cè)所述操作,自動(dòng)執(zhí)行以下步驟在資源表中刪除相應(yīng)于所述節(jié)點(diǎn)的行;確定從所述信息層次中除去所述葉節(jié)點(diǎn)是否使所述葉節(jié)點(diǎn)的父節(jié)點(diǎn)沒有剩余的子節(jié)點(diǎn);以及如果從所述信息層次中除去所述葉節(jié)點(diǎn)使所述葉節(jié)點(diǎn)的父節(jié)點(diǎn)沒有剩余的子節(jié)點(diǎn),那么,在所述資源表中刪除相應(yīng)于所述父節(jié)點(diǎn)的行。
14.根據(jù)權(quán)利要求11所述的方法,其中所述自動(dòng)維持一致性的步驟包括以下步驟檢測(cè)對(duì)所述一個(gè)或多個(gè)表的操作何時(shí)插入與所述信息層次中的節(jié)點(diǎn)關(guān)聯(lián)的資源;響應(yīng)于檢測(cè)所述操作,自動(dòng)執(zhí)行以下步驟在資源表中插入相應(yīng)于所述節(jié)點(diǎn)的行;確定來(lái)自所述信息層次的所述節(jié)點(diǎn)的增加是否導(dǎo)致將所述節(jié)點(diǎn)的一個(gè)或多個(gè)子節(jié)點(diǎn)增加給所述信息層次;以及如果來(lái)自所述信息層次的所述節(jié)點(diǎn)的增加導(dǎo)致將所述節(jié)點(diǎn)的一個(gè)或多個(gè)子節(jié)點(diǎn)增加給所述信息層次,那么在所述資源表中插入相應(yīng)于所述一個(gè)或多個(gè)子節(jié)點(diǎn)的行。
15.一種承載用于管理數(shù)據(jù)庫(kù)系統(tǒng)中的數(shù)據(jù)的指令的計(jì)算機(jī)可讀介質(zhì),所述指令包括用于執(zhí)行以下步驟的指令接收用于識(shí)別儲(chǔ)存屬于信息層次的資源的一個(gè)或多個(gè)關(guān)系表的數(shù)據(jù),其中所述一個(gè)或多個(gè)關(guān)系表中的某種數(shù)據(jù)起到用于在所述資源之間建立層次關(guān)系的外部層次定義的作用;通過(guò)執(zhí)行以下步驟捕捉所述層次中的層次關(guān)系執(zhí)行相對(duì)于所述一個(gè)或多個(gè)關(guān)系表的一個(gè)或多個(gè)查詢,以檢索所述某種數(shù)據(jù);以及根據(jù)所述某種數(shù)據(jù),在從所述一個(gè)或多個(gè)關(guān)系表分離出來(lái)的一個(gè)或多個(gè)層次結(jié)構(gòu)中儲(chǔ)存作為內(nèi)部層次定義的用于捕捉所述信息層次的信息。
16.根據(jù)權(quán)利要求15所述的計(jì)算機(jī)可讀介質(zhì),其中儲(chǔ)存用于捕捉所述信息層次的信息的步驟包括在資源表中儲(chǔ)存用于所述信息層次中的每個(gè)節(jié)點(diǎn)的行。
17.根據(jù)權(quán)利要求15所述的計(jì)算機(jī)可讀介質(zhì),其中儲(chǔ)存用于捕捉所述信息層次的信息的步驟包括在一個(gè)或多個(gè)層次結(jié)構(gòu)中儲(chǔ)存表示所述資源之間的父-子關(guān)系的信息。
18.根據(jù)權(quán)利要求15所述的計(jì)算機(jī)可讀介質(zhì),其中所述信息層次中的資源相應(yīng)于關(guān)系表中的行;以及用儲(chǔ)存在所述關(guān)系表中的兩個(gè)或更多個(gè)列中的值表示所述資源之間的父-子關(guān)系。
19.根據(jù)權(quán)利要求18所述的計(jì)算機(jī)可讀介質(zhì),其中,執(zhí)行一個(gè)或多個(gè)查詢的步驟包括執(zhí)行指定所述兩個(gè)或更多個(gè)列之間的CONNECT BY關(guān)系的查詢。
20.根據(jù)權(quán)利要求19所述的計(jì)算機(jī)可讀介質(zhì),其中所述兩個(gè)或更多個(gè)列包括含有表示關(guān)系中的子的數(shù)據(jù)的第一列和含有表示所述關(guān)系中的父的數(shù)據(jù)的第二列;以及所述執(zhí)行查詢的步驟包括執(zhí)行含有如下表述形式的查詢START WITH x IS NULL CONNECT BY PRIOR x=y(tǒng);其中,x代表所述第二列,y代表所述第一列。
21.根據(jù)權(quán)利要求15所述的計(jì)算機(jī)可讀介質(zhì),其中和所述信息層次中的葉節(jié)點(diǎn)關(guān)聯(lián)的所述資源相應(yīng)于關(guān)系表的行;以及和所述信息層次中位于給定葉節(jié)點(diǎn)之上的非葉節(jié)點(diǎn)關(guān)聯(lián)的值被儲(chǔ)存在相應(yīng)于所述給定葉節(jié)點(diǎn)的行中。
22.根據(jù)權(quán)利要求21所述的計(jì)算機(jī)可讀介質(zhì),其中所述和非葉節(jié)點(diǎn)關(guān)聯(lián)的值被儲(chǔ)存在所述關(guān)系表中的一個(gè)或多個(gè)列中;以及儲(chǔ)存用于捕捉所述信息層次的信息的步驟包括在資源表中將來(lái)自相應(yīng)于所述信息層次中的葉節(jié)點(diǎn)的行的用于每個(gè)不同值的行儲(chǔ)存到所述一個(gè)或多個(gè)列中。
23.根據(jù)權(quán)利要求15所述的計(jì)算機(jī)可讀介質(zhì),還包括用于執(zhí)行以下步驟的指令建立觸發(fā)器,以響應(yīng)于對(duì)構(gòu)成所述外部層次定義的數(shù)據(jù)做出的改變,更新構(gòu)成所述內(nèi)部層次定義的數(shù)據(jù)。
24.根據(jù)權(quán)利要求15所述的計(jì)算機(jī)可讀介質(zhì),還包括用于執(zhí)行以下步驟的指令建立觸發(fā)器,以響應(yīng)于對(duì)構(gòu)成所述內(nèi)部層次定義的數(shù)據(jù)做出的改變,更新構(gòu)成所述外部層次定義的數(shù)據(jù)。
25.根據(jù)權(quán)利要求15所述的計(jì)算機(jī)可讀介質(zhì),還包括用于執(zhí)行自動(dòng)維持所述外部層次定義和所述內(nèi)部層次定義之間的一致性的步驟的指令。
26.根據(jù)權(quán)利要求25所述的計(jì)算機(jī)可讀介質(zhì),其中所述自動(dòng)維持一致性的步驟包括以下步驟檢測(cè)對(duì)所述一個(gè)或多個(gè)表的操作何時(shí)刪除和所述信息層次中的節(jié)點(diǎn)關(guān)聯(lián)的資源;響應(yīng)于檢測(cè)所述操作,自動(dòng)執(zhí)行以下步驟在資源表中刪除相應(yīng)于所述節(jié)點(diǎn)的行;確定從所述信息層次中除去所述節(jié)點(diǎn)是否導(dǎo)致一個(gè)或多個(gè)其他節(jié)點(diǎn)懸空;以及如果從所述信息層次中除去所述節(jié)點(diǎn)導(dǎo)致一個(gè)或多個(gè)其他節(jié)點(diǎn)懸空,那么,在所述資源表中刪除相應(yīng)于所述一個(gè)或多個(gè)其他節(jié)點(diǎn)的行。
27.根據(jù)權(quán)利要求25所述的計(jì)算機(jī)可讀介質(zhì),其中所述自動(dòng)維持一致性的步驟包括以下步驟檢測(cè)對(duì)所述一個(gè)或多個(gè)表的操作何時(shí)刪除和所述信息層次中的葉節(jié)點(diǎn)關(guān)聯(lián)的資源;響應(yīng)于檢測(cè)所述操作,自動(dòng)執(zhí)行以下步驟在資源表中刪除相應(yīng)于所述節(jié)點(diǎn)的行;確定從所述信息層次中除去所述葉節(jié)點(diǎn)是否使所述葉節(jié)點(diǎn)的父節(jié)點(diǎn)沒有剩余的子節(jié)點(diǎn);以及如果從所述信息層次中除去所述葉節(jié)點(diǎn)使所述葉節(jié)點(diǎn)的父節(jié)點(diǎn)沒有剩余的子節(jié)點(diǎn),那么,在所述資源表中刪除相應(yīng)于所述父節(jié)點(diǎn)的行。
28.根據(jù)權(quán)利要求25所述的計(jì)算機(jī)可讀介質(zhì),其中所述自動(dòng)維持一致性的步驟包括以下步驟檢測(cè)對(duì)所述一個(gè)或多個(gè)表的操作何時(shí)插入與所述信息層次中的節(jié)點(diǎn)關(guān)聯(lián)的資源;響應(yīng)于檢測(cè)所述操作,自動(dòng)執(zhí)行以下步驟在資源表中插入相應(yīng)于所述節(jié)點(diǎn)的行;確定來(lái)自所述信息層次的所述節(jié)點(diǎn)的增加是否導(dǎo)致將所述節(jié)點(diǎn)的一個(gè)或多個(gè)子節(jié)點(diǎn)增加給所述信息層次;以及如果來(lái)自所述信息層次的所述節(jié)點(diǎn)的增加導(dǎo)致將所述節(jié)點(diǎn)的一個(gè)或多個(gè)子節(jié)點(diǎn)增加給所述信息層次,那么在所述資源表中插入相應(yīng)于所述一個(gè)或多個(gè)子節(jié)點(diǎn)的行。
全文摘要
本發(fā)明提供了數(shù)據(jù)的一致性層次抽象化。層次可以在層次結(jié)構(gòu)之外維持的現(xiàn)有數(shù)據(jù)中明顯或隱含地反映。這樣的層次稱之為“先前存在的層次”。此處描述的技術(shù)用于在分層結(jié)構(gòu)中捕捉先前存在的層次。在先前存在的層次已經(jīng)被捕捉后,存在兩組反映該層次的獨(dú)立數(shù)據(jù)外部層次定義和內(nèi)部層次定義。改變每個(gè)層次定義都會(huì)改變層次。因此,為了維持層次的一致性反映,響應(yīng)于對(duì)外部層次定義做出的改變,必須更改內(nèi)部層次定義,響應(yīng)于對(duì)內(nèi)部層次定義做出的改變,必須更改外部層次定義。所描述的各種技術(shù)用于維持兩個(gè)層次定義之間的一致性。
文檔編號(hào)G06F7/00GK1561497SQ02819169
公開日2005年1月5日 申請(qǐng)日期2002年9月27日 優(yōu)先權(quán)日2001年9月28日
發(fā)明者尼普恩·阿加瓦爾, 埃里克·塞德拉, 拉維·默西, 納米特·賈殷 申請(qǐng)人:甲骨文國(guó)際公司