專利名稱::利用相關(guān)數(shù)據(jù)庫實(shí)現(xiàn)非循環(huán)定向圖形結(jié)構(gòu)的方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及利用相關(guān)數(shù)據(jù)庫實(shí)現(xiàn)非循環(huán)定向圖形結(jié)構(gòu)(acyclicdirectedgraphstructure)的方法。非循環(huán)繪圖塊(diagraph)結(jié)構(gòu)頻繁地用于模型化現(xiàn)實(shí)世界分層系統(tǒng)(modelrealworldhierarchysystem)。這種可使用非循環(huán)繪圖塊結(jié)構(gòu)的分層系統(tǒng)舉例來說有家庭樹結(jié)構(gòu)、面向?qū)ο蟮年P(guān)系模型、網(wǎng)絡(luò)路由結(jié)構(gòu)等。
背景技術(shù):
:盡管非循環(huán)繪圖塊結(jié)構(gòu)在真實(shí)世界中很流行,但極少有計(jì)算機(jī)應(yīng)用程序?qū)嶋H采用這種模型。應(yīng)用程序的開發(fā)者則是喜歡使用另一種類似模型即定向樹結(jié)構(gòu)(directedtreestructure)來仿真非循環(huán)繪圖塊系統(tǒng),或者另外產(chǎn)生非循環(huán)繪圖塊的“景象(views)”并用定向樹結(jié)構(gòu)來表示這種景象。應(yīng)用程序的編程者門之所以趨向于避免使非循環(huán)繪圖塊結(jié)構(gòu)模型化的主要原因是由于這種結(jié)構(gòu)的復(fù)雜性,以及實(shí)施和維護(hù)這種結(jié)構(gòu)的復(fù)雜性。一個(gè)圖形是由節(jié)點(diǎn)(nodes)(或者點(diǎn)(points)或者頂點(diǎn)(vertices))及邊(edges)(或者連線(links)或者弧線(arcs))組成的數(shù)學(xué)系統(tǒng)。下面是從由Jean-PaulTremblay和PaulGSorenson所著的一本書中摘錄的對于圖形的數(shù)學(xué)定義(ISBN0-07-065157-4)“一個(gè)圖形G由下列部分組成稱為該圖形的節(jié)點(diǎn)(點(diǎn)、頂點(diǎn))集合的一個(gè)非空集合V、作為該圖形的邊集合的一個(gè)集合E、以及從邊的集合E到單元對集合V的一個(gè)映射。我們可以假定一個(gè)圖形的兩個(gè)集合V和E都是有限集合。也可以方便地將一個(gè)圖形寫作G=(V、E)。請注意一個(gè)圖形的定義隱含著這樣的意思對于圖形G的每一條邊,我們可以將該圖形的一對節(jié)點(diǎn)與其關(guān)聯(lián)。如果一條邊x∈E是這樣與一對節(jié)點(diǎn)(u,v)相關(guān)聯(lián)的,其中u,v∈V,則我們可以說這條邊x連接或者接合節(jié)點(diǎn)u和v。由一個(gè)圖形中的一條邊連接的任何兩個(gè)節(jié)點(diǎn)都稱為相鄰節(jié)點(diǎn)。在一個(gè)圖形G=(V,E)中,從一個(gè)節(jié)點(diǎn)指向另一個(gè)節(jié)點(diǎn)的一條邊稱為一條定向邊,而沒有特定方向的一條邊稱為一條非定向邊。其中每條邊都被定向的圖形稱為定向圖形或者繪圖塊”。除了上述定義以外,這本書還給出了下面的附加定義“一個(gè)繪圖塊的各條邊的任何順序都定義了該圖形的一條路徑,其中這種順序使得該順序中的任何邊的終節(jié)點(diǎn)都是該順序中下一個(gè)要出現(xiàn)的邊(如果有的話)的始節(jié)點(diǎn)。一條路徑是指從所述順序中第一條邊的始節(jié)點(diǎn)開始,到所述順序中最后一條邊的終節(jié)點(diǎn)結(jié)束,從而穿過出現(xiàn)在該順序中的各個(gè)節(jié)點(diǎn)。”“以同一個(gè)節(jié)點(diǎn)開始和結(jié)束的一條路徑稱為一個(gè)循環(huán)(回路)。”“沒有任何循環(huán)的一個(gè)簡單的繪圖塊稱為非循環(huán)式的?!睆纳厦娴亩x中,一個(gè)非循環(huán)繪圖塊的特性可總結(jié)如下1.其結(jié)構(gòu)僅由節(jié)點(diǎn)和邊組成;2.各條邊是非定向的;3.任何兩個(gè)節(jié)點(diǎn)之間的定向關(guān)系由一條邊的最大值來表示;4.任何兩個(gè)節(jié)點(diǎn)之間的非定向關(guān)系或路徑可通過多個(gè)邊與其它節(jié)點(diǎn)相存在;5.每個(gè)節(jié)點(diǎn)可以有一個(gè)或多個(gè)子節(jié)點(diǎn);6.每個(gè)節(jié)點(diǎn)可以有一個(gè)或多個(gè)父節(jié)點(diǎn);7.任何給定的節(jié)點(diǎn)都可以存在祖先節(jié)點(diǎn),該祖先節(jié)點(diǎn)由所有的后續(xù)父節(jié)點(diǎn)或者特定節(jié)點(diǎn)組成;8.任何給定的節(jié)點(diǎn)都可以存在后代節(jié)點(diǎn),該后代節(jié)點(diǎn)由所有的后續(xù)后代節(jié)點(diǎn)或者特定節(jié)點(diǎn)組成;9.一個(gè)節(jié)點(diǎn)的祖先不能是該相同節(jié)點(diǎn)的后代;10.任何給定的非循環(huán)繪圖塊結(jié)構(gòu)都存在一個(gè)逆結(jié)構(gòu)。任何給定的非循環(huán)繪圖塊結(jié)構(gòu)與其逆結(jié)構(gòu)是相同結(jié)構(gòu),只是所有邊的方向相反。在計(jì)算機(jī)中存儲(chǔ)并操縱非循環(huán)繪圖塊結(jié)構(gòu)的傳統(tǒng)方法是采用第三代編程語言來完成的。這基本上涉及將定義的存儲(chǔ)器存儲(chǔ)區(qū)域用作節(jié)點(diǎn),并將指針用作邊。采用C代碼的例子如下structNode(charnodename[10]structNode*nextnode[4])其中nodename表示實(shí)際節(jié)點(diǎn),而nextnode表示到另一個(gè)節(jié)點(diǎn)的邊。這種結(jié)構(gòu)的運(yùn)行可采用函數(shù)或程序來編程。這種函數(shù)的例子有“InsertNode(插入節(jié)點(diǎn))”、“DeleteNode(刪除節(jié)點(diǎn))”、“AttachNode(附加節(jié)點(diǎn))”等。盡管這種方法可有效地實(shí)施一個(gè)非循環(huán)繪圖塊,但還有幾點(diǎn)關(guān)于這種實(shí)施的復(fù)雜性和可靠性的考慮1.與一個(gè)節(jié)點(diǎn)相關(guān)的各條邊的最大數(shù)目必須事先知道;2.很難找出各節(jié)點(diǎn)之間路徑的存在,因?yàn)樗锌赡艿穆窂蕉急仨氃诘贸鼋Y(jié)論之前穿過;3.沒有考慮到這種結(jié)構(gòu)關(guān)于數(shù)據(jù)庫協(xié)調(diào)性和整體性方面的可靠性;4.沒有可行的節(jié)點(diǎn)鎖存機(jī)制,因而將這種結(jié)構(gòu)的使用限制為一個(gè)用戶或者在一個(gè)時(shí)間內(nèi)操作;5.當(dāng)使用第三代語言時(shí)可能會(huì)遇到關(guān)于存儲(chǔ)器分配或丟失指針方面的問題,這些問題可以導(dǎo)致整個(gè)程序崩潰。盡管一個(gè)訓(xùn)練的編程者可能能夠避開所有這些限制,但忙于避開每一個(gè)這些限制只會(huì)進(jìn)一步增加所做編程的復(fù)雜性。此外,由于每件事情都是通過編程來完成的,更有可能在系統(tǒng)中隱藏缺陷(bugs),因而系統(tǒng)維護(hù)會(huì)顯得非常困難和耗時(shí)。本發(fā)明的概述本發(fā)明提供了一種通過使用關(guān)系數(shù)據(jù)庫來存儲(chǔ)和操縱非循環(huán)定向圖形結(jié)構(gòu)的替代方法。按照本發(fā)明,提供了一種利用計(jì)算機(jī)運(yùn)行的關(guān)系數(shù)據(jù)庫來產(chǎn)生非循環(huán)定向圖形結(jié)構(gòu)或者非循環(huán)繪圖塊的方法,該非循環(huán)繪圖塊包括相互定向連接的多個(gè)節(jié)點(diǎn),這些節(jié)點(diǎn)的連接使得每一個(gè)節(jié)點(diǎn)在前向連接方向上具有至少一個(gè)子節(jié)點(diǎn)和/或在反向連接方向上具有至少一個(gè)父節(jié)點(diǎn),所述方法包括產(chǎn)生一個(gè)節(jié)點(diǎn)表格結(jié)構(gòu),該節(jié)點(diǎn)表格結(jié)構(gòu)表示非循環(huán)繪圖塊中每個(gè)節(jié)點(diǎn)之間的相互關(guān)系和至少一種節(jié)點(diǎn)特性;產(chǎn)生一個(gè)邊表格結(jié)構(gòu),該邊表格結(jié)構(gòu)表示非循環(huán)繪圖塊中每個(gè)定向連接的節(jié)點(diǎn)對之間的相互關(guān)系;和產(chǎn)生一個(gè)路徑表格結(jié)構(gòu),該路徑表格結(jié)構(gòu)表示非循環(huán)繪圖塊中任何兩個(gè)節(jié)點(diǎn)之間路徑的存在性。本發(fā)明還提供了一種在關(guān)系數(shù)據(jù)庫系統(tǒng)中的計(jì)算機(jī)存儲(chǔ)數(shù)據(jù)結(jié)構(gòu),用于表示一非循環(huán)繪圖塊,該非循環(huán)繪圖塊包括相互定向連接的多個(gè)節(jié)點(diǎn),這些節(jié)點(diǎn)的連接使得每一個(gè)節(jié)點(diǎn)在前向連接方向上具有至少一個(gè)子節(jié)點(diǎn)和/或在反向連接方向上具有至少一個(gè)父節(jié)點(diǎn),所述數(shù)據(jù)結(jié)構(gòu)包括一個(gè)節(jié)點(diǎn)表格結(jié)構(gòu),指示所述非循環(huán)繪圖塊中每個(gè)節(jié)點(diǎn)之間的相互關(guān)系和至少一種節(jié)點(diǎn)特性,所述節(jié)點(diǎn)表結(jié)構(gòu)包括用于所述非循環(huán)繪圖塊中的每個(gè)節(jié)點(diǎn)的記錄,每個(gè)節(jié)點(diǎn)表格結(jié)構(gòu)記錄包括一節(jié)點(diǎn)標(biāo)識字段和至少一個(gè)節(jié)點(diǎn)特性字段;一個(gè)邊表格結(jié)構(gòu),指示所述非循環(huán)繪圖塊中每一對連接的父和子節(jié)點(diǎn)之間的相互關(guān)系,所述邊表格結(jié)構(gòu)包括用于每一對父和子連接節(jié)點(diǎn)的記錄,每個(gè)邊表格結(jié)構(gòu)記錄包括用以識別所述父節(jié)點(diǎn)和所述子節(jié)點(diǎn)的相應(yīng)字段;和一個(gè)路徑表格結(jié)構(gòu),指示所述非循環(huán)繪圖塊中任何兩個(gè)節(jié)點(diǎn)之間路徑的存在性,所述路徑表格結(jié)構(gòu)包括用于每一對父和子連接節(jié)點(diǎn)和每一對其中兩個(gè)節(jié)點(diǎn)通過中介連接的祖先和后代連接節(jié)點(diǎn)的記錄,每個(gè)路徑表格結(jié)構(gòu)記錄包括用以識別每一個(gè)節(jié)點(diǎn)對的相應(yīng)字段。一種維護(hù)如上所述的由本發(fā)明提供的數(shù)據(jù)結(jié)構(gòu)的方法,包括一節(jié)點(diǎn)創(chuàng)建程序,用于通過使用所述節(jié)點(diǎn)識別字段中的一個(gè)唯一值將一條新記錄插入到所述節(jié)點(diǎn)表格結(jié)構(gòu)中而在所述非循環(huán)繪圖塊中創(chuàng)建一新節(jié)點(diǎn);一節(jié)點(diǎn)鏈接程序,用于將所述非循環(huán)繪圖塊中的一子節(jié)點(diǎn)鏈接到一父節(jié)點(diǎn),包括下列步驟將一條新記錄插入到所述邊表格結(jié)構(gòu)中,該記錄用以識別所述子節(jié)點(diǎn)和所述父節(jié)點(diǎn)以及從所述父節(jié)點(diǎn)到所述子節(jié)點(diǎn)的連接方向;將一條新記錄插入到所述路徑表格結(jié)構(gòu)中,該記錄用以識別所述子節(jié)點(diǎn)和所述父節(jié)點(diǎn)以及從所述父節(jié)點(diǎn)到所述子節(jié)點(diǎn)的連接方向;從所述路徑表格結(jié)構(gòu)中選擇連接到所述父節(jié)點(diǎn)的每一個(gè)祖先節(jié)點(diǎn),并將一條新記錄插入到所述路徑表格結(jié)構(gòu)中,該記錄用以識別所述子節(jié)點(diǎn)和每一個(gè)祖先節(jié)點(diǎn)以及從所述祖先節(jié)點(diǎn)到所述子節(jié)點(diǎn)的連接方向;和從所述路徑表格結(jié)構(gòu)中選擇所述子節(jié)點(diǎn)所連接的每一個(gè)后代節(jié)點(diǎn),并將一條新記錄插入到所述路徑表格結(jié)構(gòu)中,該記錄用以識別所述子節(jié)點(diǎn)和每一個(gè)后代節(jié)點(diǎn)以及從所述子節(jié)點(diǎn)到所述后代節(jié)點(diǎn)的連接方向;一節(jié)點(diǎn)解鏈接程序,用于將所述非循環(huán)繪圖塊中的一子節(jié)點(diǎn)與一父節(jié)點(diǎn)解鏈接,包括下列步驟從所述邊表格結(jié)構(gòu)中去除用以識別所述子節(jié)點(diǎn)和所述父節(jié)點(diǎn)的記錄;從所述路徑表格結(jié)構(gòu)中去除用以識別所述子節(jié)點(diǎn)的每一個(gè)記錄;從所述路徑表格結(jié)構(gòu)中選擇并去除用以識別所述父節(jié)點(diǎn)的一祖先節(jié)點(diǎn)和所述子節(jié)點(diǎn)的一后代節(jié)點(diǎn)的記錄;和從識別所述父節(jié)點(diǎn)的一祖先節(jié)點(diǎn)的記錄開始,系統(tǒng)化地查看所述邊表格結(jié)構(gòu),以確定從所述父節(jié)點(diǎn)的一祖先節(jié)點(diǎn)到所述子節(jié)點(diǎn)的一后代節(jié)點(diǎn)的任何路徑,查看所述路徑表格結(jié)構(gòu),以了解是否由一條路徑表格結(jié)構(gòu)記錄識別出任何這種路徑,并且,如果所述路徑表格結(jié)構(gòu)中不存在這種路徑,則將一條識別所述路徑的新記錄插入到所述路徑表格結(jié)構(gòu)中;和一去除節(jié)點(diǎn)程序,用于從所述非循環(huán)繪圖塊中去除已被解鏈接的一節(jié)點(diǎn),包括從所述節(jié)點(diǎn)表格結(jié)構(gòu)中去除識別所述被解鏈接的節(jié)點(diǎn)的記錄。附圖的簡要說明下面將通過舉例方式參照附圖對本發(fā)明進(jìn)行更詳細(xì)的說明,附圖中圖1是非循環(huán)定向圖形結(jié)構(gòu)的典型圖示;和圖2是另一種非循環(huán)繪圖塊結(jié)構(gòu)的例子。優(yōu)選實(shí)施例的詳細(xì)描述下面描述的是利用商用相關(guān)數(shù)據(jù)庫實(shí)現(xiàn)非循環(huán)繪圖塊結(jié)構(gòu)的方法。從如何存儲(chǔ)、恢復(fù)、更新和維護(hù)結(jié)構(gòu)中的各項(xiàng)目這些方面來描述各種操作。使用商用數(shù)據(jù)庫的優(yōu)點(diǎn)如下1.能以負(fù)擔(dān)得起的價(jià)格從市面上當(dāng)時(shí)得到;2.能加快應(yīng)用程序開發(fā)時(shí)間;3.利用了關(guān)系數(shù)據(jù)庫的強(qiáng)度。這包括可靠性、入網(wǎng)工作能力、索引能力等;4.關(guān)系數(shù)據(jù)庫建立在集合原理和拓?fù)溆?jì)算法這些數(shù)學(xué)概念的基礎(chǔ)上。將這些概念應(yīng)用于非循環(huán)繪圖塊結(jié)構(gòu)的操作。本發(fā)明的優(yōu)選形式采用三種數(shù)據(jù)庫表格。這些表格為1.節(jié)點(diǎn)表格這種表格存儲(chǔ)每個(gè)節(jié)點(diǎn)的特性。必須使用一個(gè)關(guān)鍵字段來唯一地識別每個(gè)節(jié)點(diǎn)。任何數(shù)目的附加字段也可以用于表示節(jié)點(diǎn)的附加特性。因此,這種表格中的每一條記錄將表示非循環(huán)定向樹結(jié)構(gòu)中的一個(gè)節(jié)點(diǎn)。2.邊表格這種表格存儲(chǔ)任何兩個(gè)節(jié)點(diǎn)之間的相互關(guān)系。它必須包括至少兩個(gè)字段,一個(gè)是父字段(或始節(jié)點(diǎn)字段),一個(gè)是子字段(或終節(jié)點(diǎn)字段)。因此,這種表格中的每一條記錄將表示非循環(huán)定向圖形結(jié)構(gòu)中的一條邊。3.路徑表格這種表格列出任何兩個(gè)節(jié)點(diǎn)之間的路徑。這種表格必須包括至少兩個(gè)字段,一個(gè)是祖先字段(路徑的始節(jié)點(diǎn)),一個(gè)是后代字段(路徑的終節(jié)點(diǎn))。因此,這種表格中的每一條記錄將表示非循環(huán)定向圖形結(jié)構(gòu)中的一條路徑。請注意,這種表格沒有列出任何兩個(gè)節(jié)點(diǎn)之間的路由,而是僅僅列出任何兩個(gè)節(jié)點(diǎn)之間路徑的存在性,所述路由必須通過詳細(xì)研究(traverse)邊表格來得出。這樣就足夠了,因?yàn)樗鼤?huì)表示出兩個(gè)節(jié)點(diǎn)之間的相互關(guān)系。保持所有三個(gè)表格之間的整體性很重要。下面的規(guī)則可用于保證維護(hù)整體性1.父字段、子字段、祖先字段和后代字段中的每個(gè)值必須能夠映射到所述節(jié)點(diǎn)表格中的一個(gè)關(guān)鍵字段記錄;2.在路徑表格中表示的所有路徑都必須能夠通過利用所述邊表格詳細(xì)研究各節(jié)點(diǎn)而再現(xiàn)出來;3.通過詳細(xì)研究所述邊表格中的各節(jié)點(diǎn)而可以追蹤的所述結(jié)構(gòu)中所有可能的路徑都表示在所述路徑表格中。如果保持這三個(gè)規(guī)則,那么所述的三種表格就會(huì)表示一非循環(huán)定向圖形結(jié)構(gòu)。請注意,這種方法也允許多于一個(gè)的非循環(huán)繪圖塊結(jié)構(gòu)在任何一個(gè)時(shí)間內(nèi)存在于數(shù)據(jù)庫中,還允許不同的結(jié)構(gòu)合并在一起,或者分裂為兩種不同的結(jié)構(gòu)。還請注意,這種技術(shù)也允許人們不僅可以表示一非循環(huán)定向圖形結(jié)構(gòu),還可以表示其逆結(jié)構(gòu)。關(guān)系數(shù)據(jù)庫中這種結(jié)構(gòu)的例子由下面的表1、2和3來表示,并且在圖1中以圖表形式示出。表1節(jié)點(diǎn)表格表2邊表格表3路徑表格<tablesid="table5"num="005"><table>31331449415513696107117127138149151115</table></tables>為了有效地操縱非循環(huán)定向圖形結(jié)構(gòu),需要定義幾種操作。下面就是對各種操作以及如何實(shí)施這些操作的作為樣品的MicrosoftSQL服務(wù)器代碼的描述。創(chuàng)建節(jié)點(diǎn)這種操作在結(jié)構(gòu)中創(chuàng)建一個(gè)新的節(jié)點(diǎn)。結(jié)構(gòu)中的一個(gè)新節(jié)點(diǎn)由節(jié)點(diǎn)表格中的一條新記錄來表示。還必須產(chǎn)生新的關(guān)鍵值以唯一識別該新節(jié)點(diǎn)。也可以為新節(jié)點(diǎn)規(guī)定一個(gè)或多個(gè)附加特性。新節(jié)點(diǎn)一旦建立,則會(huì)與結(jié)構(gòu)的其它部分獨(dú)立存在。它必須鏈接到已經(jīng)存在于結(jié)構(gòu)中的一節(jié)點(diǎn)并成為該結(jié)構(gòu)的一部分。例子INSERTINTOnode_table(node,property)VALUES(16,Blue);去除節(jié)點(diǎn)這種操作從結(jié)構(gòu)中完全去除一個(gè)節(jié)點(diǎn)。請注意該節(jié)點(diǎn)在其被去除之前必須首先與所有其它節(jié)點(diǎn)解鏈接。鏈接節(jié)點(diǎn)這種操作將結(jié)構(gòu)中的一節(jié)點(diǎn)(子節(jié)點(diǎn))鏈接到另一節(jié)點(diǎn)(父節(jié)點(diǎn))。通過鏈接這兩個(gè)節(jié)點(diǎn),還可在結(jié)構(gòu)中形成新的路徑。這種算法的一部分是要保證結(jié)構(gòu)的整體性。這種算法為1.確定是否將由鏈接操作形成一循環(huán)路徑。(這可以通過保證要鏈接的子節(jié)點(diǎn)不能已經(jīng)是要鏈接的父節(jié)點(diǎn)的祖先節(jié)點(diǎn)而容易地做到)。如果將會(huì)形成循環(huán)路徑,則程序終止,因?yàn)樗玫慕Y(jié)構(gòu)將不會(huì)是非循環(huán)的。2.將子節(jié)點(diǎn)鏈接到父節(jié)點(diǎn)。3.確定是否有至少一條新路徑已經(jīng)存在于所述結(jié)構(gòu)中。(如果至少一條新路徑已經(jīng)存在,則所有可能的新路徑應(yīng)當(dāng)已經(jīng)存在于所述結(jié)構(gòu)中)。4.如果路徑已經(jīng)存在則結(jié)束操作,否則便繼續(xù)到下一步。5.產(chǎn)生所有新路徑的一列表,并將相應(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)分別作為祖先和后代增加到所述路徑表格中。鏈接操作的例子<prelisting-type="program-listing"><![CDATA[CREATPROCEDURELink@parent_node,@child_nodeASDECLARE@ancestorintDECLARE@testcountintDECLAREnodeancestorINSENSITIVECURSORFORSELECTDISTINCTancestorFROMpath_tableWHEREdescendant=@parent_nodeBEGINSELECT@testcount=COUNT(ancestor)FROMpath_tableWHEREdescendant=@parent_nodeANDancestor=@child_nodeIF@testcount>0BEGINRAISERROR(‘IllegalLink,Cyclicpathnotallowed’,16,-l)RETURNENDINSERTINTOedge_table(parent,child)VALUES@parent_node,@child_nodeSELECT@testcount=COUNT(ancestor)FROMpath_tableWHEREancestor=@parent_nodeANDdescendant=@child_nodeIF@testcount>0BEGINRETURN/*Pathalreadyexistinstructure*/ENDOPENnodeancestorFETCHnodeancestorINTO@ancestorWHILE@@fetch_status=0BEGININSETINTOpath_table(ancestor,descendant)SELECT@ancestor,descendantFROMpath_tableWHEREancestor=@child_nodeANDdescendantNOTIN(SELECTdescendantFROMpath_tableWHEREancestor=@ancestor)INSERTINTOpath_table(ancestor,descendant)SELECTDISTINCTparent,@child_nodeFROMedge_tableWHEREparent=@ancestorANDchild_nodeNOTIN(SELECTdescendantFROMpath_tableWHEREancestor=@ancestor)FETCHnodeancestorINTO@ancestorENDINSERTINTOpath_table(ancestor,descendant)SELECT@parent_node,descendantFROMpath_tableWHEREancestor=@child_nodeANDdescendantNOTIN(SELECTdescendantFROMpath_tableWHEREancestor=@parent_node)INSERTINTOpath_table(ancestor,descendant)SELECTDISTINCTparent,@child_nodeFROMedge_tableWHEREparent=@parent_nodeAND@child_nodeNOTIN(SELECTdescendantFROMpath_tableWHEREancestor=@parent_node)END]]></pre>對節(jié)點(diǎn)解鏈接這種操作將結(jié)構(gòu)中的一節(jié)點(diǎn)(子節(jié)點(diǎn))與另一節(jié)點(diǎn)(父節(jié)點(diǎn))解鏈接。通過對任意兩個(gè)節(jié)點(diǎn)解鏈接,路徑表格需要被更新以反映某些路徑不再有效。用于解鏈接操作的算法可表達(dá)為1.從邊表格中去除所述父節(jié)點(diǎn)和子節(jié)點(diǎn)之間的鏈接。將該子節(jié)點(diǎn)鏈接到父節(jié)點(diǎn)。2.從路徑表格中去除所述父節(jié)點(diǎn)的各祖先和所述子節(jié)點(diǎn)的各后代之間的所有鏈接。3.從路徑表格中去除所述父節(jié)點(diǎn)和子節(jié)點(diǎn)之間的鏈接。4.在路徑表格之后增加可通過可替代路徑存在于所述父節(jié)點(diǎn)的各祖先和所述子節(jié)點(diǎn)的各后代之間的所有鏈接。5.在路徑表格之后增加經(jīng)由可替代路由的所述父節(jié)點(diǎn)和所述子節(jié)點(diǎn)之間的鏈接(如果這種路徑的確存在的話)。解鏈接操作的例子<prelisting-type="program-listing"><![CDATA[CREATPROCEDUREunlink@parent_node@child_nodeASDECLARE@ancestorintDECLARE@testcountintDECLAREnodeancestorSCROLLCURSORFORSELECTDISTINCTpath_table1.ancestorFROMpath_tableaspath_tablelINNERJOINpath_tableaspath_table2ONpath_table1.ancestor=path_table2.ancestorWHEREpath_table1.descendant=@child_nodeAND(path_table2.descendant=@parent_nodeORpath_table1.ancestor=@parent_node)BEGINSELECTFROMedge_tableWHEREparent=@parent_nodeANDchild=@child_nodeOPENnodeancestorFETCHFIRSTnodeancestorINTO@ancestorWHILE@@fetch_status=0BEGINDELETEFROMpath_tableWHEREancestor=@ancestorAND(descendantIN(SELECTdescendantFROMpath_tableWHEREancestor=@child_node)ORdescendant=@class_node)FETCHNEXTnodeancestorINTO@ancestorENDFETCHFIRSTnodeancestorINTO@ancestorWHILE@@fetch_status=0BEGININSERTINTOpath_table(ancestor,descendant)SELECT@ancestor,childFROMedge_tableINNERJOINpath_tableONparent=descendantWHEREancestor=@ancestorANDchildNOTIN(SELECTdescendantFROMpath_tableWHEREancestor=@ancestor)INSERTINTOpath_table(ancestor,descendant)SELECT@ancestor,childFROMedge_tableWHEREparent=@ancestorANDchildNOTIN(SELECTdescendantFROMpath_tableWHEREancestor=@ancestor)FETCHNEXTFROMnodeancestorINTO@ancestorENDEND]]></pre>這種技術(shù)如何應(yīng)用的一個(gè)例子是分類系統(tǒng)(ClassificationSystem)。一個(gè)商業(yè)目錄可能會(huì)有數(shù)百個(gè)產(chǎn)品和服務(wù)類別。這些類別可以組織到定向圖形結(jié)構(gòu)中。一種樣品分類結(jié)構(gòu)的一部分示例示于圖2中。利用所描述的表示這種分類系統(tǒng)的技術(shù),可列出下列表格表4節(jié)點(diǎn)表格表5邊表格表6路徑表格因此就有可能將公司(company)與任何給定的類別相聯(lián)系,為此,確保所有的祖先類別也可以“固有(inherit)”這種相互關(guān)系。例如,假定想要通過將一條記錄插入到一個(gè)被特殊建立以表示這種相互關(guān)系的一表格中,而將公司“CaterpillarPumpsLtd(凱特比勒泵有限公司)”與“空氣泵”聯(lián)系起來。下面的表格就是結(jié)果公司分類表然后,該路徑表格可用于將同樣的關(guān)系反映到祖先類別。用SQL語句實(shí)現(xiàn)的樣例為<prelisting-type="program-listing"><![CDATA[INSERTINTOcompany_classification_tableSELECTancestor,“CaterpillarPumpsLtd”FROMpath_tableWHEREdescendant=5]]></pre>于是,所得表格為如果還有公司想加入到該系統(tǒng),比如說將“CalpedaValvesLtd(凱爾比達(dá)閥門有限公司)”加到類別“閥門”,并且將“GreenTreatmentLtd(格林處理有限公司)”加到類別“污水泵”,則所得表格為同樣的表格,但通過分類而存儲(chǔ)之后,將成為<tablesid="table14"num="014"><table>1凱特比勒泵有限公司1凱爾比達(dá)閥門有限公司1格林處理有限公司2凱爾比達(dá)閥門有限公司3凱特比勒泵有限公司3格林處理有限公司4格林處理有限公司5凱特比勒泵有限公司7格林處理有限公司</table></tables>因此,能夠快速維護(hù)正確的“遺傳(inheritance)”結(jié)構(gòu),而不需要找出根節(jié)點(diǎn),也不需要詳細(xì)研究任何路徑。上面對本發(fā)明優(yōu)選實(shí)施例的詳細(xì)描述已經(jīng)通過舉例形式表示出,但并不打算將由所附權(quán)利要求書限定的本發(fā)明限制為上述說明。權(quán)利要求1.一種利用計(jì)算機(jī)運(yùn)行的關(guān)系數(shù)據(jù)庫來產(chǎn)生非循環(huán)定向圖形結(jié)構(gòu)或者非循環(huán)繪圖塊的方法,該非循環(huán)繪圖塊包括相互定向連接的多個(gè)節(jié)點(diǎn),這些節(jié)點(diǎn)的連接使得每一個(gè)節(jié)點(diǎn)在前向連接方向上具有至少一個(gè)子節(jié)點(diǎn)和/或在反向連接方向上具有至少一個(gè)父節(jié)點(diǎn),所述方法包括產(chǎn)生一個(gè)節(jié)點(diǎn)表格結(jié)構(gòu),該節(jié)點(diǎn)表格結(jié)構(gòu)表示非循環(huán)繪圖塊中每個(gè)節(jié)點(diǎn)之間的相互關(guān)系和至少一種節(jié)點(diǎn)特性;產(chǎn)生一個(gè)邊表格結(jié)構(gòu),該邊表格結(jié)構(gòu)表示非循環(huán)繪圖塊中每個(gè)定向連接的節(jié)點(diǎn)對之間的相互關(guān)系;和產(chǎn)生一個(gè)路徑表格結(jié)構(gòu),該路徑表格結(jié)構(gòu)表示非循環(huán)繪圖塊中任何兩個(gè)節(jié)點(diǎn)之間路徑的存在性。2.如權(quán)利要求1所述的方法,其中,所述節(jié)點(diǎn)表格結(jié)構(gòu)包括用于所述非循環(huán)繪圖塊中的每個(gè)節(jié)點(diǎn)的記錄,每個(gè)節(jié)點(diǎn)表格結(jié)構(gòu)記錄包括一節(jié)點(diǎn)標(biāo)識字段和至少一個(gè)節(jié)點(diǎn)特性字段。3.如權(quán)利要求1所述的方法,其中,所述邊表格結(jié)構(gòu)包括用于每個(gè)定向連接的節(jié)點(diǎn)對的記錄,每個(gè)邊表格結(jié)構(gòu)記錄包括用以識別每個(gè)節(jié)點(diǎn)對的相應(yīng)字段。4.如權(quán)利要求3所述的方法,其中,每個(gè)邊表格結(jié)構(gòu)記錄中的字段順序表示在該記錄中識別的各節(jié)點(diǎn)的連接方向。5.如權(quán)利要求1所述的方法,其中,所述路徑表格結(jié)構(gòu)包括用于每個(gè)定向連接的節(jié)點(diǎn)對和每個(gè)非定向連接的節(jié)點(diǎn)對的記錄,每個(gè)路徑表格結(jié)構(gòu)記錄包括用以識別每一個(gè)節(jié)點(diǎn)對的相應(yīng)字段。6.如權(quán)利要求5所述的方法,其中,包含在所述邊表格結(jié)構(gòu)中的數(shù)據(jù)包括包含在所述路徑表格結(jié)構(gòu)中的數(shù)據(jù)的子集。7.如權(quán)利要求5所述的方法,其中,每個(gè)路徑表格結(jié)構(gòu)記錄中的字段順序表示在該記錄中識別的各節(jié)點(diǎn)的連接方向。8.如權(quán)利要求1所述的方法,其中所述節(jié)點(diǎn)表格結(jié)構(gòu)包括用于所述非循環(huán)繪圖塊中每個(gè)節(jié)點(diǎn)的記錄,每個(gè)節(jié)點(diǎn)表格結(jié)構(gòu)記錄包括一節(jié)點(diǎn)標(biāo)識字段和至少一個(gè)節(jié)點(diǎn)特性字段;所述邊表格結(jié)構(gòu)包括用于每個(gè)定向連接的節(jié)點(diǎn)對的記錄,每個(gè)邊表格結(jié)構(gòu)記錄包括用以識別每個(gè)節(jié)點(diǎn)對的相應(yīng)字段,每個(gè)邊表格結(jié)構(gòu)記錄中的字段順序表示在該記錄中識別的各節(jié)點(diǎn)的連接方向;和所述路徑表格結(jié)構(gòu)包括用于每個(gè)定向連接的節(jié)點(diǎn)對和每個(gè)非定向連接的節(jié)點(diǎn)對的記錄,每個(gè)路徑表格結(jié)構(gòu)記錄包括用以識別每個(gè)節(jié)點(diǎn)對的相應(yīng)字段,每個(gè)路徑表格結(jié)構(gòu)記錄中的字段順序表示在該記錄中識別的各節(jié)點(diǎn)的連接方向。9.如權(quán)利要求8所述的方法,包括一節(jié)點(diǎn)創(chuàng)建程序,用于通過使用所述節(jié)點(diǎn)識別字段中的一個(gè)唯一值將一條新記錄插入到所述節(jié)點(diǎn)表格結(jié)構(gòu)中而在所述非循環(huán)繪圖塊中創(chuàng)建一新節(jié)點(diǎn)。10.如權(quán)利要求9所述的方法,包括一節(jié)點(diǎn)鏈接程序,用于將所述新節(jié)點(diǎn)作為子節(jié)點(diǎn)鏈接到所述非循環(huán)繪圖塊中的一個(gè)父節(jié)點(diǎn),包括下列步驟將一條新記錄插入到所述邊表格結(jié)構(gòu)中,該記錄用以識別所述子節(jié)點(diǎn)和所述父節(jié)點(diǎn)以及從所述父節(jié)點(diǎn)到所述子節(jié)點(diǎn)的連接方向;將一條新記錄插入到所述路徑表格結(jié)構(gòu)中,該記錄用以識別所述子節(jié)點(diǎn)和所述父節(jié)點(diǎn)以及從所述父節(jié)點(diǎn)到所述子節(jié)點(diǎn)的連接方向;和從所述路徑表格結(jié)構(gòu)中選擇連接到所述父節(jié)點(diǎn)的每一個(gè)祖先節(jié)點(diǎn),并將一條新記錄插入到所述路徑表格結(jié)構(gòu)中,該記錄用以識別所述子節(jié)點(diǎn)和每一個(gè)祖先節(jié)點(diǎn)以及從所述祖先節(jié)點(diǎn)到所述子節(jié)點(diǎn)的連接方向。11.如權(quán)利要求8所述的方法,包括一節(jié)點(diǎn)鏈接程序,用于將一子節(jié)點(diǎn)鏈接到所述非循環(huán)繪圖塊中的一個(gè)父節(jié)點(diǎn),包括下列步驟將一條新記錄插入到所述邊表格結(jié)構(gòu)中,該記錄用以識別所述子節(jié)點(diǎn)和所述父節(jié)點(diǎn)以及從所述父節(jié)點(diǎn)到所述子節(jié)點(diǎn)的連接方向;將一條新記錄插入到所述路徑表格結(jié)構(gòu)中,該記錄用以識別所述子節(jié)點(diǎn)和所述父節(jié)點(diǎn)以及從所述父節(jié)點(diǎn)到所述子節(jié)點(diǎn)的連接方向;從所述路徑表格結(jié)構(gòu)中選擇連接到所述父節(jié)點(diǎn)的每一個(gè)祖先節(jié)點(diǎn),并將一條新記錄插入到所述路徑表格結(jié)構(gòu)中,該記錄用以識別所述子節(jié)點(diǎn)和每一個(gè)祖先節(jié)點(diǎn)以及從所述祖先節(jié)點(diǎn)到所述子節(jié)點(diǎn)的連接方向;和從所述路徑表格結(jié)構(gòu)中選擇所述子節(jié)點(diǎn)所連接的每一個(gè)后代節(jié)點(diǎn),并將一條新記錄插入到所述路徑表格結(jié)構(gòu)中,該記錄用以識別所述父節(jié)點(diǎn)和每一個(gè)后代節(jié)點(diǎn)以及從所述父節(jié)點(diǎn)到所述后代節(jié)點(diǎn)的連接方向;12.如權(quán)利要求8所述的方法,包括一節(jié)點(diǎn)解鏈接程序,用于將所述非循環(huán)繪圖塊中的一子節(jié)點(diǎn)與一父節(jié)點(diǎn)解鏈接,包括下列步驟從所述邊表格結(jié)構(gòu)中去除用以識別所述子節(jié)點(diǎn)和所述父節(jié)點(diǎn)的記錄;從所述路徑表格結(jié)構(gòu)中去除用以識別所述子節(jié)點(diǎn)的每一個(gè)記錄;從所述路徑表格結(jié)構(gòu)中選擇并去除用以識別所述父節(jié)點(diǎn)的一祖先節(jié)點(diǎn)和所述子節(jié)點(diǎn)的一后代節(jié)點(diǎn)的每一個(gè)記錄;和從識別所述父節(jié)點(diǎn)的一祖先節(jié)點(diǎn)的記錄開始,系統(tǒng)化地查看所述邊表格結(jié)構(gòu),以確定從所述父節(jié)點(diǎn)的一祖先節(jié)點(diǎn)到所述子節(jié)點(diǎn)的一后代節(jié)點(diǎn)存在的任何其它路徑,查看所述路徑表格結(jié)構(gòu),以了解是否由一條路徑表格結(jié)構(gòu)記錄識別出任何這種路徑,并且,如果所述路徑表格結(jié)構(gòu)中不存在這種路徑,則將一條識別所述路徑的新記錄插入到所述路徑表格結(jié)構(gòu)中。13.如權(quán)利要求12所述的方法,包括一去除節(jié)點(diǎn)程序,用于從所述非循環(huán)繪圖塊中去除已被解鏈接的一節(jié)點(diǎn),包括從所述節(jié)點(diǎn)表格結(jié)構(gòu)中去除識別所述被解鏈接的節(jié)點(diǎn)的記錄。14.一種在關(guān)系數(shù)據(jù)庫系統(tǒng)中的計(jì)算機(jī)存儲(chǔ)數(shù)據(jù)結(jié)構(gòu),用于表示一非循環(huán)繪圖塊,該非循環(huán)繪圖塊包括相互定向連接的多個(gè)節(jié)點(diǎn),這些節(jié)點(diǎn)的連接使得每一個(gè)節(jié)點(diǎn)在前向連接方向上具有至少一個(gè)子節(jié)點(diǎn)和/或在反向連接方向上具有至少一個(gè)父節(jié)點(diǎn),所述數(shù)據(jù)結(jié)構(gòu)包括一個(gè)節(jié)點(diǎn)表格結(jié)構(gòu),存儲(chǔ)所述非循環(huán)繪圖塊中每個(gè)節(jié)點(diǎn)之間的相互關(guān)系和至少一種節(jié)點(diǎn)特性,所述節(jié)點(diǎn)表結(jié)構(gòu)包括用于所述非循環(huán)繪圖塊中的每個(gè)節(jié)點(diǎn)的記錄,每個(gè)節(jié)點(diǎn)表格結(jié)構(gòu)記錄包括一節(jié)點(diǎn)標(biāo)識字段和至少一個(gè)節(jié)點(diǎn)特性字段;一個(gè)邊表格結(jié)構(gòu),存儲(chǔ)所述非循環(huán)繪圖塊中每一對連接的父和子節(jié)點(diǎn)之間的相互關(guān)系,所述邊表格結(jié)構(gòu)包括用于每一對父和子連接節(jié)點(diǎn)的記錄,每個(gè)邊表格結(jié)構(gòu)記錄包括用以識別所述父節(jié)點(diǎn)和所述子節(jié)點(diǎn)的相應(yīng)字段;和一個(gè)路徑表格結(jié)構(gòu),存儲(chǔ)所述非循環(huán)繪圖塊中任何兩個(gè)節(jié)點(diǎn)之間路徑的出現(xiàn)性,所述路徑表格結(jié)構(gòu)包括用于每一對父和子連接節(jié)點(diǎn)和每一對其中兩個(gè)節(jié)點(diǎn)通過中介連接的祖先和后代連接節(jié)點(diǎn)的記錄,每個(gè)路徑表格結(jié)構(gòu)記錄包括用以識別每一個(gè)節(jié)點(diǎn)對的相應(yīng)字段。15.一種包括如權(quán)利要求14所定義的計(jì)算機(jī)存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)的產(chǎn)品和/或服務(wù)分類系統(tǒng),其中,所述節(jié)點(diǎn)表格結(jié)構(gòu)中的至少一種節(jié)點(diǎn)特性表示與所述非循環(huán)繪圖塊的相應(yīng)節(jié)點(diǎn)相關(guān)的一種特定產(chǎn)品或服務(wù)。16.如權(quán)利要求15所述的產(chǎn)品和/或服務(wù)分類系統(tǒng),包括一分類表格結(jié)構(gòu),用于存儲(chǔ)供應(yīng)者或消費(fèi)者與所述非循環(huán)繪圖塊中的一節(jié)點(diǎn)之間的相互關(guān)系,所述分類表格結(jié)構(gòu)具有至少一條包括一節(jié)點(diǎn)識別字段和一公司識別字段的記錄,所述節(jié)點(diǎn)識別字段用于識別所述非循環(huán)繪圖塊中的一個(gè)所述節(jié)點(diǎn),而所述公司識別字段用于識別相應(yīng)的供應(yīng)者或消費(fèi)者。17.如權(quán)利要求16所述的產(chǎn)品和/或服務(wù)分類系統(tǒng),其中所述分類表格結(jié)構(gòu)包括一記錄,該記錄具有一相應(yīng)的公司識別字段,用于相應(yīng)于所述路徑表格結(jié)構(gòu)的、所述分類表格中識別的任何節(jié)點(diǎn)的每一個(gè)祖先節(jié)點(diǎn)。18.一種維護(hù)如權(quán)利要求14所述的數(shù)據(jù)結(jié)構(gòu)的方法,包括一節(jié)點(diǎn)創(chuàng)建程序,用于通過使用所述節(jié)點(diǎn)識別字段中的一個(gè)唯一值將一條新記錄插入到所述節(jié)點(diǎn)表格結(jié)構(gòu)中而在所述非循環(huán)繪圖塊中創(chuàng)建一新節(jié)點(diǎn);一節(jié)點(diǎn)鏈接程序,用于將所述非循環(huán)繪圖塊中的一子節(jié)點(diǎn)鏈接到一父節(jié)點(diǎn),包括下列步驟將一條新記錄插入到所述邊表格結(jié)構(gòu)中,該記錄用以識別所述子節(jié)點(diǎn)和所述父節(jié)點(diǎn)以及從所述父節(jié)點(diǎn)到所述子節(jié)點(diǎn)的連接方向;將一條新記錄插入到所述路徑表格結(jié)構(gòu)中,該記錄用以識別所述子節(jié)點(diǎn)和所述父節(jié)點(diǎn)以及從所述父節(jié)點(diǎn)到所述子節(jié)點(diǎn)的連接方向;從所述路徑表格結(jié)構(gòu)中選擇連接到所述父節(jié)點(diǎn)的每一個(gè)祖先節(jié)點(diǎn),并將一條新記錄插入到所述路徑表格結(jié)構(gòu)中,該記錄用以識別所述子節(jié)點(diǎn)和每一個(gè)祖先節(jié)點(diǎn)以及從所述祖先節(jié)點(diǎn)到所述子節(jié)點(diǎn)的連接方向;和從所述路徑表格結(jié)構(gòu)中選擇所述子節(jié)點(diǎn)所連接的每一個(gè)后代節(jié)點(diǎn),并將一條新記錄插入到所述路徑表格結(jié)構(gòu)中,該記錄用以識別所述子節(jié)點(diǎn)和每一個(gè)后代節(jié)點(diǎn)以及從所述子節(jié)點(diǎn)到所述后代節(jié)點(diǎn)的連接方向;一節(jié)點(diǎn)解鏈接程序,用于將所述非循環(huán)繪圖塊中的一子節(jié)點(diǎn)與一父節(jié)點(diǎn)解鏈接,包括下列步驟從所述邊表格結(jié)構(gòu)中去除用以識別所述子節(jié)點(diǎn)和所述父節(jié)點(diǎn)的記錄;從所述路徑表格結(jié)構(gòu)中去除用以識別所述子節(jié)點(diǎn)的每一個(gè)記錄;從所述路徑表格結(jié)構(gòu)中選擇并去除用以識別所述父節(jié)點(diǎn)的一祖先節(jié)點(diǎn)和所述子節(jié)點(diǎn)的一后代節(jié)點(diǎn)的每一個(gè)記錄;和從識別所述父節(jié)點(diǎn)的一祖先節(jié)點(diǎn)的記錄開始,系統(tǒng)化地查看所述邊表格結(jié)構(gòu),以確定從所述父節(jié)點(diǎn)的一祖先節(jié)點(diǎn)到所述子節(jié)點(diǎn)的一后代節(jié)點(diǎn)的任何路徑,查看所述路徑表格結(jié)構(gòu),以了解是否由一條路徑表格結(jié)構(gòu)記錄識別出任何這種路徑,并且,如果所述路徑表格結(jié)構(gòu)中不存在這種路徑,則將一條識別所述路徑的新記錄插入到所述路徑表格結(jié)構(gòu)中;和一去除節(jié)點(diǎn)程序,用于從所述非循環(huán)繪圖塊中去除已被解鏈接的一節(jié)點(diǎn),包括從所述節(jié)點(diǎn)表格結(jié)構(gòu)中去除識別所述被解鏈接的節(jié)點(diǎn)的記錄。19.一種維護(hù)如權(quán)利要求15到17所述的產(chǎn)品和/或服務(wù)分類系統(tǒng)的方法,包括一節(jié)點(diǎn)創(chuàng)建程序,用于通過使用所述節(jié)點(diǎn)識別字段中的一個(gè)唯一值和所述節(jié)點(diǎn)特性字段中的一產(chǎn)品或服務(wù)標(biāo)識將一條新記錄插入到所述節(jié)點(diǎn)表格結(jié)構(gòu)中,而在所述非循環(huán)繪圖塊中創(chuàng)建一新節(jié)點(diǎn);一節(jié)點(diǎn)鏈接程序,用于將所述非循環(huán)繪圖塊中的一子節(jié)點(diǎn)鏈接到一父節(jié)點(diǎn),包括下列步驟將一條新記錄插入到所述邊表格結(jié)構(gòu)中,該記錄用以識別所述子節(jié)點(diǎn)和所述父節(jié)點(diǎn)以及從所述父節(jié)點(diǎn)到所述子節(jié)點(diǎn)的連接方向;將一條新記錄插入到所述路徑表格結(jié)構(gòu)中,該記錄用以識別所述子節(jié)點(diǎn)和所述父節(jié)點(diǎn)以及從所述父節(jié)點(diǎn)到所述子節(jié)點(diǎn)的連接方向;從所述路徑表格結(jié)構(gòu)中選擇連接到所述父節(jié)點(diǎn)的每一個(gè)祖先節(jié)點(diǎn),并將一條新記錄插入到所述路徑表格結(jié)構(gòu)中,該記錄用以識別所述子節(jié)點(diǎn)和每一個(gè)祖先節(jié)點(diǎn)以及從所述祖先節(jié)點(diǎn)到所述子節(jié)點(diǎn)的連接方向;和從所述路徑表格結(jié)構(gòu)中選擇所述子節(jié)點(diǎn)所連接的每一個(gè)后代節(jié)點(diǎn),并將一條新記錄插入到所述路徑表格結(jié)構(gòu)中,該記錄用以識別所述子節(jié)點(diǎn)和每一個(gè)后代節(jié)點(diǎn)以及從所述子節(jié)點(diǎn)到所述后代節(jié)點(diǎn)的連接方向;一節(jié)點(diǎn)解鏈接程序,用于將所述非循環(huán)繪圖塊中的一子節(jié)點(diǎn)從一父節(jié)點(diǎn)中解鏈接,包括下列步驟從所述邊表格結(jié)構(gòu)中去除用以識別所述子節(jié)點(diǎn)和所述父節(jié)點(diǎn)的記錄;從所述路徑表格結(jié)構(gòu)中去除用以識別所述子節(jié)點(diǎn)的每一個(gè)記錄;從所述路徑表格結(jié)構(gòu)中選擇并去除用以識別所述父節(jié)點(diǎn)的一祖先節(jié)點(diǎn)和所述子節(jié)點(diǎn)的一后代節(jié)點(diǎn)的每一個(gè)記錄;和從識別所述父節(jié)點(diǎn)的一祖先節(jié)點(diǎn)的記錄開始,系統(tǒng)化地查看所述邊表格結(jié)構(gòu),以確定從所述父節(jié)點(diǎn)的一祖先節(jié)點(diǎn)到所述子節(jié)點(diǎn)的一后代節(jié)點(diǎn)的任何路徑,查看所述路徑表格結(jié)構(gòu),以了解是否由一條路徑表格結(jié)構(gòu)記錄識別出任何這種路徑,并且,如果所述路徑表格結(jié)構(gòu)中不存在這種路徑,則將一條識別所述路徑的新記錄插入到所述路徑表格結(jié)構(gòu)中;和一去除節(jié)點(diǎn)程序,用于從所述非循環(huán)繪圖塊中去除已被解鏈接的一節(jié)點(diǎn),包括從所述節(jié)點(diǎn)表格結(jié)構(gòu)中去除識別所述被解鏈接的節(jié)點(diǎn)的記錄。20.如權(quán)利要求19所述的維護(hù)產(chǎn)品和/或服務(wù)分類系統(tǒng)的方法,包括一公司分類程序,用于通過下列步驟產(chǎn)生一公司分類表格結(jié)構(gòu)指定與所述非循環(huán)繪圖塊中的至少一個(gè)節(jié)點(diǎn)相關(guān)聯(lián)的至少一個(gè)供應(yīng)者或消費(fèi)者公司;系統(tǒng)化地查看所述路徑表格結(jié)構(gòu),以確定到與所指定的公司相關(guān)聯(lián)的所述至少一個(gè)節(jié)點(diǎn)的每一個(gè)祖先節(jié)點(diǎn);和產(chǎn)生一公司分類表格結(jié)構(gòu),該結(jié)構(gòu)具有用以識別每一個(gè)確定的祖先節(jié)點(diǎn)和與其相關(guān)的至少一個(gè)指定公司的記錄。21.如權(quán)利要求20所述的維護(hù)產(chǎn)品和/或服務(wù)分類系統(tǒng)的方法,其中所述公司分類表格包括一存儲(chǔ)的對應(yīng)關(guān)系,該對應(yīng)關(guān)系是指所述至少一個(gè)指定公司和相應(yīng)于來自所述節(jié)點(diǎn)表格結(jié)構(gòu)的每一個(gè)確定的祖先節(jié)點(diǎn)的產(chǎn)品和/或服務(wù)之間的對應(yīng)關(guān)系。全文摘要一種利用計(jì)算機(jī)關(guān)系數(shù)據(jù)庫系統(tǒng)來實(shí)施非循環(huán)定向圖形結(jié)構(gòu)的方法。表示非循環(huán)繪圖塊的一種有利的關(guān)系數(shù)據(jù)庫結(jié)構(gòu)可以通過創(chuàng)建三種表格結(jié)構(gòu)來獲得,這三種表格結(jié)構(gòu)用于存儲(chǔ)繪圖塊中各節(jié)點(diǎn)之間的相互關(guān)系及其它特性。節(jié)點(diǎn)表格存儲(chǔ)繪圖塊中每個(gè)節(jié)點(diǎn)之間的相互關(guān)系和分配給各節(jié)點(diǎn)的特性。邊表格存儲(chǔ)定向鏈接的各節(jié)點(diǎn)及所鏈接的方向的指示。路徑表格存儲(chǔ)定向或非定向鏈接的各節(jié)點(diǎn)及其各路徑的方向的指示。還公開了用于以一致方式維護(hù)數(shù)據(jù)庫結(jié)構(gòu)的方法。文檔編號G06F17/30GK1299489SQ99805869公開日2001年6月13日申請日期1999年3月6日優(yōu)先權(quán)日1998年3月6日發(fā)明者約翰·F·K·Y·張申請人:張嘉運(yùn)