国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      基于自身連接的數(shù)據(jù)庫(kù)查詢(xún)方法

      文檔序號(hào):6519661閱讀:1491來(lái)源:國(guó)知局
      基于自身連接的數(shù)據(jù)庫(kù)查詢(xún)方法
      【專(zhuān)利摘要】本發(fā)明涉及一種基于自身連接的數(shù)據(jù)庫(kù)查詢(xún)方法,其中,自身連接是指同一個(gè)表自己與自己進(jìn)行連接。這種一元連接通常用于從自反關(guān)系(也稱(chēng)作遞歸關(guān)系)中抽取數(shù)據(jù)。自身連接可以看作一張表的兩個(gè)副本之間進(jìn)行的連接。在自身連接中,必須為表指定兩個(gè)別名,使之在邏輯上成為兩張表。基于自身連接的數(shù)據(jù)庫(kù)查詢(xún)方法,具體包括:(1)遞歸循環(huán)檢測(cè)查詢(xún);(2)非一致性檢測(cè)查詢(xún)。本發(fā)明通過(guò)上述查詢(xún)算法,可以獲得較好的查詢(xún)結(jié)果,而且算法簡(jiǎn)單,實(shí)現(xiàn)的效果較好,能夠針對(duì)基于自身連接的數(shù)據(jù)庫(kù)進(jìn)行查詢(xún)。
      【專(zhuān)利說(shuō)明】基于自身連接的數(shù)據(jù)庫(kù)查詢(xún)方法
      【技術(shù)領(lǐng)域】
      [0001]本發(fā)明涉及一種基于自身連接的數(shù)據(jù)庫(kù)查詢(xún)方法,屬于數(shù)據(jù)庫(kù)查詢(xún)【技術(shù)領(lǐng)域】。
      【背景技術(shù)】
      [0002]數(shù)據(jù)庫(kù)連接查詢(xún)是一種關(guān)鍵的有限的昂貴的資源,這一點(diǎn)在多用戶的網(wǎng)頁(yè)應(yīng)用程序中體現(xiàn)得尤為突出。對(duì)數(shù)據(jù)庫(kù)連接查詢(xún)的管理能顯著影響到整個(gè)應(yīng)用程序的伸縮性和健壯性,影響到程序的性能指標(biāo)。數(shù)據(jù)庫(kù)連接池負(fù)責(zé)分配、管理和釋放數(shù)據(jù)庫(kù)連接,它允許應(yīng)用程序重復(fù)使用一個(gè)現(xiàn)有的數(shù)據(jù)庫(kù)連接,而再不是重新建立一個(gè);釋放空閑時(shí)間超過(guò)最大空閑時(shí)間的數(shù)據(jù)庫(kù)連接來(lái)避免因?yàn)闆](méi)有釋放數(shù)據(jù)庫(kù)連接而引起的數(shù)據(jù)庫(kù)連接遺漏。這項(xiàng)技術(shù)能明顯提高對(duì)數(shù)據(jù)庫(kù)操作的性能。

      【發(fā)明內(nèi)容】

      [0003]本發(fā)明的目的在于提供一種基于自身連接的數(shù)據(jù)庫(kù)查詢(xún)方法,以便能夠更好地針對(duì)性進(jìn)行查詢(xún),獲得理想的查詢(xún)結(jié)果。
      [0004]為了實(shí)現(xiàn)上述目的,本發(fā)明的技術(shù)方案如下:
      一種基于自身連接的數(shù) 據(jù)庫(kù)查詢(xún)方法,其中,自身連接是指同一個(gè)表自己與自己進(jìn)行連接。這種一元連接通常用于從自反關(guān)系(也稱(chēng)作遞歸關(guān)系)中抽取數(shù)據(jù)。自身連接可以看作一張表的兩個(gè)副本之間進(jìn)行的連接。在自身連接中,必須為表指定兩個(gè)別名,使之在邏輯上成為兩張表。
      [0005]基于自身連接的數(shù)據(jù)庫(kù)查詢(xún)方法,具體包括:
      (1)遞歸循環(huán)檢測(cè)查詢(xún):
      遞歸常見(jiàn)表表達(dá)式可以限制遞歸級(jí)別數(shù),將關(guān)系返回到任意深度的查詢(xún)。如果不對(duì)級(jí)別數(shù)加以限制,且存在循環(huán),則會(huì)產(chǎn)生無(wú)限遞歸,每次迭代期間選擇的行數(shù)可能會(huì)以指數(shù)方式增加,嚴(yán)重影響數(shù)據(jù)庫(kù)性能,而導(dǎo)致錯(cuò)誤。因此采用遞歸成員中的篩選器和實(shí)現(xiàn)查詢(xún)請(qǐng)求。為了檢測(cè)循環(huán),可以使用相應(yīng)的常見(jiàn)表表達(dá)式,為每個(gè)節(jié)點(diǎn)構(gòu)建通向該節(jié)點(diǎn)的所有節(jié)點(diǎn)的枚舉路徑。一旦檢測(cè)到循環(huán),就可以檢測(cè)到非一致性問(wèn)題。
      [0006]遞歸循環(huán)檢測(cè)算法的基本思想如下:錨定成員和遞歸成員中的對(duì)應(yīng)列必須具有相同的數(shù)據(jù)類(lèi)型、長(zhǎng)度和精度,因此生成path值的表達(dá)式在兩個(gè)成員中都被轉(zhuǎn)換為VARCHAR(50)。在遞歸成員中,調(diào)用該結(jié)果列路徑,使用以見(jiàn)表達(dá)式和ZTZA謂詞檢查當(dāng)前子節(jié)點(diǎn)是否已經(jīng)出現(xiàn)在父節(jié)點(diǎn)的路徑中。如果答案是肯定的,則意味著找到了循環(huán),則在名為吖士的結(jié)果列中返回1,否則返回O。并向遞歸成員中添加一個(gè)篩選器,確保只返回未檢測(cè)到循環(huán)的父節(jié)點(diǎn)的下屬。然后,向外部查詢(xún)中添加一個(gè)篩選器,以便只返回找到循環(huán)的子節(jié)點(diǎn)得到遞歸路徑。實(shí)現(xiàn)遞歸常見(jiàn)表表達(dá)式的步驟為:終止檢查在遞歸常見(jiàn)表表達(dá)式中是隱式的,沒(méi)有從上一個(gè)調(diào)用中返回任何行時(shí),遞歸停止。
      [0007](2)非一致性檢測(cè)查詢(xún):
      查詢(xún)返回出現(xiàn)了子節(jié)點(diǎn)的浪屬性值大于父節(jié)點(diǎn)的A?屬性值。得到{dp3,dp3, dp3, dp4, dpi),顯然不是一致性結(jié)果??赡軐儆谵kJ或辦因此辦^可能不滿足查詢(xún)。給出用于返回一致性結(jié)果的重寫(xiě)查詢(xún),得到{obUA?}。然而,由于可能存在環(huán),重寫(xiě)需要考慮環(huán)。因此,把遞歸循環(huán)檢測(cè)的方法加入到重寫(xiě)查詢(xún),用來(lái)剔除可能的非一致性循環(huán)數(shù)據(jù)。
      [0008]非一致性檢測(cè)遞歸算法的基本思想如下:
      (I )candl類(lèi)似于初始查詢(xún),加入了 DISTINCT關(guān)鍵字和鍵屬性。基于candl結(jié)果集,通過(guò)對(duì)鍵分組得到存在于多個(gè)分組屬性的鍵值,然后結(jié)果集過(guò)濾/^7ter7結(jié)果集中的這些鍵值,得到cmd2結(jié)果集。再基于cmd2結(jié)果集,考慮再滿足初始查詢(xún)中鍵值及其分組屬性中,過(guò)濾相反條件和條件屬性出現(xiàn)空值的元組,得到普通的一致性。
      [0009](2)然后考慮剔除可能的非一致性循環(huán)元組。為了檢測(cè)循環(huán),為cand3結(jié)果集中的每個(gè)節(jié)點(diǎn)構(gòu)建通向該節(jié)點(diǎn)的所有節(jié)點(diǎn)的枚舉路徑。在遞歸成員中,調(diào)用該結(jié)果列路徑,使用CASE表達(dá)式和ZJ低謂詞檢查當(dāng)前鍵值是否已經(jīng)出現(xiàn)在父節(jié)點(diǎn)的路徑中。如果答案是肯定的,則意味著找到了循環(huán),則在名為的結(jié)果列中返回1,否則返回O。并向遞歸成員中添加一個(gè)篩選器,確保只返回未檢測(cè)到循環(huán)的父節(jié)點(diǎn)的下屬。
      [0010](3)最后,向外部查詢(xún)中添加一個(gè)篩選器,返回存在于cand3結(jié)果集中且不存在于 中的節(jié)點(diǎn)。
      [0011]該發(fā)明的有益效果在于:本發(fā)明通過(guò)上述查詢(xún)算法,可以獲得較好的查詢(xún)結(jié)果,而且算法簡(jiǎn)單,實(shí)現(xiàn)的效果較好,能夠針對(duì)基于自身連接的數(shù)據(jù)庫(kù)進(jìn)行查詢(xún)。
      【專(zhuān)利附圖】

      【附圖說(shuō)明】
      [0012]圖1是本發(fā)明實(shí)施例中非一致性單父節(jié)點(diǎn)層次結(jié)構(gòu)圖。
      [0013]圖2是本發(fā)明實(shí)施例中非一致性檢測(cè)的遞歸算法圖。
      【具體實(shí)施方式】
      [0014]下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明的【具體實(shí)施方式】進(jìn)行描述,以便更好的理解本發(fā)明。
      實(shí)施例
      [0015]基于自身連接的數(shù)據(jù)庫(kù)查詢(xún)方法,其中,自身連接是指同一個(gè)表自己與自己進(jìn)行連接。這種一元連接通常用于從自反關(guān)系(也稱(chēng)作遞歸關(guān)系)中抽取數(shù)據(jù)。自身連接可以看作一張表的兩個(gè)副本之間進(jìn)行的連接。在自身連接中,必須為表指定兩個(gè)別名,使之在邏輯上成為兩張表。
      [0016]如給定關(guān)系左以厶A2, A3, A4)的實(shí)例{(a, dl, dpi, 100), (bl, a, dp2, 50), (b2,a, dp2,40),(cl, bl, dp3,70),(cl, b2,dp4,70),(c2,b2,dp3,30), (c3,b2,dp3,51), (c3,b2,dp3,52),(dl, c2,dp4,30)}為單父節(jié)點(diǎn)層次結(jié)構(gòu)(如圖1所示)。由于存在非一致性數(shù)據(jù),c3的
      屬性值不一覽,cl與bl和/^的關(guān)系不確定,且從a b2 c2 dl a存在環(huán)。
      [0017]基于自身連接的數(shù)據(jù)庫(kù)查詢(xún)方法,具體包括:
      (1)遞歸循環(huán)檢測(cè)查詢(xún):
      遞歸常見(jiàn)表表達(dá)式可以限制遞歸級(jí)別數(shù),將關(guān)系返回到任意深度的查詢(xún)。如果不對(duì)級(jí)別數(shù)加以限制,且存在循環(huán),則會(huì)產(chǎn)生無(wú)限遞歸,每次迭代期間選擇的行數(shù)可能會(huì)以指數(shù)方式增加,嚴(yán)重影響數(shù)據(jù)庫(kù)性能,而導(dǎo)致錯(cuò)誤。因此采用遞歸成員中的篩選器和實(shí)現(xiàn)查詢(xún)請(qǐng)求。本實(shí)施例中,采用仏防7作為遞歸層數(shù),對(duì)于每個(gè)遞歸調(diào)用,值反復(fù)遞增,可以限制遞歸中的迭代次數(shù)。得到{(b2,a, 0), (cl, b2,I), (c2,b2,I), (c3,b2,I), (c3,b2,I), (dl,c2,2), (a, dl, 3), (bl, a, 4),(b2, a, 4)}。
      [0018]為了檢測(cè)循環(huán),可以使用相應(yīng)的常見(jiàn)表表達(dá)式,為每個(gè)節(jié)點(diǎn)構(gòu)建通向該節(jié)點(diǎn)的所有節(jié)點(diǎn)的枚舉路徑。一旦檢測(cè)到循環(huán),就可以檢測(cè)到非一致性問(wèn)題。遞歸循環(huán)檢測(cè)算法的基本思想如下:錨定成員和遞歸成員中的對(duì)應(yīng)列必須具有相同的數(shù)據(jù)類(lèi)型、長(zhǎng)度和精度,因此生成/73從值的表達(dá)式在兩個(gè)成員中都被轉(zhuǎn)換為在遞歸成員中,調(diào)用該結(jié)果列路徑,使用以見(jiàn)表達(dá)式和謂詞檢查當(dāng)前子節(jié)點(diǎn)是否已經(jīng)出現(xiàn)在父節(jié)點(diǎn)的路徑中。如果答案是肯定的,則意味著找到了循環(huán),則在名為cycle的結(jié)果列中返回1,否則返回
      O。并向遞歸成員中添加一個(gè)篩選器,確保只返回未檢測(cè)到循環(huán)的父節(jié)點(diǎn)的下屬。然后,向外部查詢(xún)中添加一個(gè)篩選器,以便只返回找到循環(huán)的子節(jié)點(diǎn)入得到遞歸路徑。實(shí)現(xiàn)遞歸常見(jiàn)表表達(dá)式的步驟為:終止檢查在遞歸常見(jiàn)表表達(dá)式中是隱式的,沒(méi)有從上一個(gè)調(diào)用中返回任何行時(shí),遞歸停止。
      [0019](2)非一致性檢測(cè)查詢(xún):
      查詢(xún)返回出現(xiàn)了子節(jié)點(diǎn)的浪屬性值大于父節(jié)點(diǎn)的A?屬性值。得到{dp3,dp3, dp3, dp4, dpi},顯然不是一致性結(jié)果。可能屬于辦J或辦因此辦^可能不滿足查詢(xún)。給出用于返回一致性結(jié)果的重寫(xiě)查詢(xún),得到然而,由于可能存在環(huán),重寫(xiě)需要考慮環(huán)。因此,把遞歸循環(huán)檢測(cè)的方法加入到重寫(xiě)查詢(xún),用來(lái)剔除可能的非一致性循環(huán)數(shù)據(jù)。
      [0020]如圖2所示,非一致性檢測(cè)遞歸算法的基本思想如下:
      (I )candl類(lèi)似于初始查詢(xún),加入了 DISTINCT關(guān)鍵字和鍵屬性。基于candl結(jié)果集,通過(guò)對(duì)鍵分組得到存在于多個(gè)分組·屬性的鍵值,然后結(jié)果集過(guò)濾/^7ter7結(jié)果集中的這些鍵值,得到cmd2結(jié)果集。再基于cmd2結(jié)果集,考慮再滿足初始查詢(xún)中鍵值及其分組屬性中,過(guò)濾相反條件和條件屬性出現(xiàn)空值的元組,得到普通的一致性。
      [0021](2)然后考慮剔除可能的非一致性循環(huán)元組。為了檢測(cè)循環(huán),為結(jié)果集中的每個(gè)節(jié)點(diǎn)構(gòu)建通向該節(jié)點(diǎn)的所有節(jié)點(diǎn)的枚舉路徑。在遞歸成員中,調(diào)用該結(jié)果列路徑,使用CASE表達(dá)式和LIKE謂詞檢查當(dāng)前鍵值是否已經(jīng)出現(xiàn)在父節(jié)點(diǎn)的路徑中。如果答案是肯定的,則意味著找到了循環(huán),則在名為的結(jié)果列中返回1,否則返回O。并向遞歸成員中添加一個(gè)篩選器,確保只返回未檢測(cè)到循環(huán)的父節(jié)點(diǎn)的下屬。
      [0022](3)最后,向外部查詢(xún)中添加一個(gè)篩選器,返回存在于cand3結(jié)果集中且不存在于 中的節(jié)點(diǎn)。
      [0023]以上所述是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本【技術(shù)領(lǐng)域】的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也視為本發(fā)明的保護(hù)范圍。
      【權(quán)利要求】
      1.一種基于自身連接的數(shù)據(jù)庫(kù)查詢(xún)方法,其特征在于:具體包括: (1)遞歸循環(huán)檢測(cè)查詢(xún),所述遞歸循環(huán)檢測(cè)算法的基本思想如下:錨定成員和遞歸成員中的對(duì)應(yīng)列具有相同的數(shù)據(jù)類(lèi)型、長(zhǎng)度和精度,生成path值的表達(dá)式在兩個(gè)成員中都被轉(zhuǎn)散為VAmm(50);在遞歸成員中,調(diào)用該結(jié)果列路徑,使用以見(jiàn)表達(dá)式和ZTZA謂詞檢查當(dāng)前子節(jié)點(diǎn)是否已經(jīng)出現(xiàn)在父節(jié)點(diǎn)的路徑中;如果答案是肯定的,則意味著找到了循環(huán),則在名為的結(jié)果列中返回1,否則返回O ;并向遞歸成員中添加一個(gè)篩選器,確保只返回未檢測(cè)到循環(huán)的父節(jié)點(diǎn)的下屬;然后,向外部查詢(xún)中添加一個(gè)篩選器,以便只返回找到循環(huán)的子節(jié)點(diǎn)化_^仏二7人得到遞歸路徑;實(shí)現(xiàn)遞歸常見(jiàn)表達(dá)式的步驟為:終止檢查在遞歸常見(jiàn)表表達(dá)式中是隱式的,沒(méi)有從上一個(gè)調(diào)用中返回任何行時(shí),遞歸停止; (2)非一致性檢測(cè)查詢(xún):所述非一致性檢測(cè)查詢(xún)的遞歸算法的基本思想如下: {2a)candl類(lèi)似于初始查詢(xún),加入了關(guān)鍵字和鍵屬性:基于結(jié)果集,通過(guò)對(duì)鍵分組得到存在于多個(gè)分組屬性的鍵值,然后結(jié)果集過(guò)濾/^7ter7結(jié)果集中的這些鍵值,得到cmd2結(jié)果集;再基于cmd2結(jié)果集,考慮再滿足初始查詢(xún)中鍵值及其分組屬性中,過(guò)濾相反條件和條件屬性出現(xiàn)空值的元組,得到普通的一致性; (2b)然后考慮剔除可能的非一致性循環(huán)元組:為了檢測(cè)循環(huán),為cand3結(jié)果集中的每個(gè)節(jié)點(diǎn)構(gòu)建通向該節(jié)點(diǎn)的所有節(jié)點(diǎn)的枚舉路徑;在遞歸成員中,調(diào)用該結(jié)果列路徑,使用CASE表達(dá)式和LIKE謂詞檢查當(dāng)前鍵值是否已經(jīng)出現(xiàn)在父節(jié)點(diǎn)的路徑中;如果答案是肯定的,則意味著找到了循環(huán),則在名為的結(jié)果列中返回1,否則返回O ;并向遞歸成員中添加一個(gè)篩選器,確保只返回未檢測(cè)到循環(huán)的父節(jié)點(diǎn)的下屬; (2c)最后,向外部查詢(xún)中添加一個(gè)篩選器,返回存在于cmd3結(jié)果集中且不存在于CTE中的節(jié)點(diǎn)。
      【文檔編號(hào)】G06F17/30GK103593448SQ201310580481
      【公開(kāi)日】2014年2月19日 申請(qǐng)日期:2013年11月19日 優(yōu)先權(quán)日:2013年11月19日
      【發(fā)明者】不公告發(fā)明人 申請(qǐng)人:湖南人文科技學(xué)院
      網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1