[發(fā)明專利]基于自身連接的數(shù)據(jù)庫查詢方法在審
| 申請?zhí)枺?/td> | 201310580481.3 | 申請日: | 2013-11-19 |
| 公開(公告)號: | CN103593448A | 公開(公告)日: | 2014-02-19 |
| 發(fā)明(設(shè)計)人: | 不公告發(fā)明人 | 申請(專利權(quán))人: | 湖南人文科技學(xué)院 |
| 主分類號: | G06F17/30 | 分類號: | G06F17/30 |
| 代理公司: | 暫無信息 | 代理人: | 暫無信息 |
| 地址: | 417000 湖南省*** | 國省代碼: | 湖南;43 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 基于 自身 連接 數(shù)據(jù)庫 查詢 方法 | ||
技術(shù)領(lǐng)域
本發(fā)明涉及一種基于自身連接的數(shù)據(jù)庫查詢方法,屬于數(shù)據(jù)庫查詢技術(shù)領(lǐng)域。
背景技術(shù)
數(shù)據(jù)庫連接查詢是一種關(guān)鍵的有限的昂貴的資源,這一點(diǎn)在多用戶的網(wǎng)頁應(yīng)用程序中體現(xiàn)得尤為突出。對數(shù)據(jù)庫連接查詢的管理能顯著影響到整個應(yīng)用程序的伸縮性和健壯性,影響到程序的性能指標(biāo)。數(shù)據(jù)庫連接池負(fù)責(zé)分配、管理和釋放數(shù)據(jù)庫連接,它允許應(yīng)用程序重復(fù)使用一個現(xiàn)有的數(shù)據(jù)庫連接,而再不是重新建立一個;釋放空閑時間超過最大空閑時間的數(shù)據(jù)庫連接來避免因?yàn)闆]有釋放數(shù)據(jù)庫連接而引起的數(shù)據(jù)庫連接遺漏。這項(xiàng)技術(shù)能明顯提高對數(shù)據(jù)庫操作的性能。?
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種基于自身連接的數(shù)據(jù)庫查詢方法,以便能夠更好地針對性進(jìn)行查詢,獲得理想的查詢結(jié)果。
為了實(shí)現(xiàn)上述目的,本發(fā)明的技術(shù)方案如下:?
一種基于自身連接的數(shù)據(jù)庫查詢方法,其中,自身連接是指同一個表自己與自己進(jìn)行連接。這種一元連接通常用于從自反關(guān)系(也稱作遞歸關(guān)系)中抽取數(shù)據(jù)。自身連接可以看作一張表的兩個副本之間進(jìn)行的連接。在自身連接中,必須為表指定兩個別名,使之在邏輯上成為兩張表。
基于自身連接的數(shù)據(jù)庫查詢方法,具體包括:
(1)遞歸循環(huán)檢測查詢:
遞歸常見表表達(dá)式可以限制遞歸級別數(shù),將關(guān)系返回到任意深度的查詢。如果不對級別數(shù)加以限制,且存在循環(huán),則會產(chǎn)生無限遞歸,每次迭代期間選擇的行數(shù)可能會以指數(shù)方式增加,嚴(yán)重影響數(shù)據(jù)庫性能,而導(dǎo)致錯誤。因此采用遞歸成員中的篩選器和實(shí)現(xiàn)查詢請求。為了檢測循環(huán),可以使用相應(yīng)的常見表表達(dá)式,為每個節(jié)點(diǎn)構(gòu)建通向該節(jié)點(diǎn)的所有節(jié)點(diǎn)的枚舉路徑。一旦檢測到循環(huán),就可以檢測到非一致性問題。
遞歸循環(huán)檢測算法的基本思想如下:錨定成員和遞歸成員中的對應(yīng)列必須具有相同的數(shù)據(jù)類型、長度和精度,因此生成?path?值的表達(dá)式在兩個成員中都被轉(zhuǎn)換為VARCHAR(50)。在遞歸成員中,調(diào)用該結(jié)果列路徑,使用?CASE表達(dá)式和LIKE?謂詞檢查當(dāng)前子節(jié)點(diǎn)是否已經(jīng)出現(xiàn)在父節(jié)點(diǎn)的路徑中。如果答案是肯定的,則意味著找到了循環(huán),則在名為cycle的結(jié)果列中返回1,否則返回0。并向遞歸成員中添加一個篩選器,確保只返回未檢測到循環(huán)的父節(jié)點(diǎn)的下屬。然后,向外部查詢中添加一個篩選器,以便只返回找到循環(huán)的子節(jié)點(diǎn)(cycle=1),得到遞歸路徑。實(shí)現(xiàn)遞歸常見表表達(dá)式的步驟為:終止檢查在遞歸常見表表達(dá)式中是隱式的,沒有從上一個調(diào)用中返回任何行時,遞歸停止。
(2)非一致性檢測查詢:
查詢返回出現(xiàn)了子節(jié)點(diǎn)的A4屬性值大于父節(jié)點(diǎn)的A3屬性值。得到{dp3,dp3,dp3,dp4,dp1},顯然不是一致性結(jié)果。c1可能屬于dp3或dp4,因此dp4可能不滿足查詢。給出用于返回一致性結(jié)果的重寫查詢,得到{dp1,dp3}。然而,由于可能存在環(huán),重寫需要考慮環(huán)。因此,把遞歸循環(huán)檢測的方法加入到重寫查詢,用來剔除可能的非一致性循環(huán)數(shù)據(jù)。
非一致性檢測遞歸算法的基本思想如下:
(1)cand1類似于初始查詢,加入了DISTINCT關(guān)鍵字和鍵屬性?;?i>cand1結(jié)果集,通過對鍵分組得到存在于多個分組屬性的鍵值,然后cand1結(jié)果集過濾Filter1結(jié)果集中的這些鍵值,得到cand2結(jié)果集。再基于cand2結(jié)果集,考慮再滿足初始查詢中鍵值及其分組屬性中,過濾相反條件和條件屬性出現(xiàn)空值的元組,得到普通的一致性。
(2)然后考慮剔除可能的非一致性循環(huán)元組。為了檢測循環(huán),為cand3結(jié)果集中的每個節(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),則在名為cycle的結(jié)果列中返回1,否則返回0。并向遞歸成員中添加一個篩選器,確保只返回未檢測到循環(huán)的父節(jié)點(diǎn)的下屬。
(3)最后,向外部查詢中添加一個篩選器,返回存在于cand3結(jié)果集中且不存在于CTE中的節(jié)點(diǎn)。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于湖南人文科技學(xué)院,未經(jīng)湖南人文科技學(xué)院許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201310580481.3/2.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。
- 數(shù)據(jù)庫
- 數(shù)據(jù)庫管理系統(tǒng)及數(shù)據(jù)庫
- 數(shù)據(jù)庫構(gòu)筑裝置、數(shù)據(jù)庫檢索裝置、數(shù)據(jù)庫裝置、數(shù)據(jù)庫構(gòu)筑方法、以及數(shù)據(jù)庫檢索方法
- 數(shù)據(jù)庫和數(shù)據(jù)庫處理方法
- 數(shù)據(jù)庫系統(tǒng)、數(shù)據(jù)庫更新方法、數(shù)據(jù)庫以及數(shù)據(jù)庫更新程序
- 容器數(shù)據(jù)庫
- 數(shù)據(jù)庫同步方法及數(shù)據(jù)庫
- 一種MongoDB數(shù)據(jù)庫對象復(fù)制延遲監(jiān)控方法和裝置
- 數(shù)據(jù)分布式存儲方法、裝置、電子設(shè)備及存儲介質(zhì)
- 數(shù)據(jù)庫語句執(zhí)行方法及裝置





