應(yīng)用于在線教育系統(tǒng)中的樹形數(shù)據(jù)結(jié)構(gòu)的建立方法【專利摘要】本發(fā)明公開了一種應(yīng)用于在線教育系統(tǒng)中的樹形數(shù)據(jù)結(jié)構(gòu)的建立方法,其中包括如下步驟:從根節(jié)點(diǎn)開始,按照從上到下,從左至右的順序,按照遞增數(shù)列規(guī)則依次給每一個(gè)節(jié)點(diǎn)定義一個(gè)用于識(shí)別的左編號(hào)數(shù)值Lft和右編號(hào)數(shù)值Rgt數(shù)值;根據(jù)節(jié)點(diǎn)的左編號(hào)數(shù)值Lft和右編號(hào)數(shù)值Rgt來查詢所述節(jié)點(diǎn)的子節(jié)點(diǎn)個(gè)數(shù),所述查詢公式為:ROUND((Rgt-Lft-遞增量)/2);創(chuàng)建樹形數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),建立與所述樹形數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)匹配的關(guān)系數(shù)據(jù)表。該方法可大大提高對(duì)樹形數(shù)據(jù)的增刪改查操作的效率;在在線視頻教育系統(tǒng)中,通過節(jié)點(diǎn)左、右編號(hào)數(shù)值在關(guān)系數(shù)據(jù)庫(kù)中存儲(chǔ)樹形數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)課程欄目分類子欄目的無限級(jí)聯(lián)和組織結(jié)構(gòu)的無限級(jí)聯(lián)?!緦@f明】應(yīng)用于在線教育系統(tǒng)中的樹形數(shù)據(jù)結(jié)構(gòu)的建立方法【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明涉及數(shù)據(jù)處理【
技術(shù)領(lǐng)域:
】,尤其涉及一種應(yīng)用于在線教育系統(tǒng)中的樹形數(shù)據(jù)結(jié)構(gòu)的建立方法?!?br>背景技術(shù):
】[0002]在線教育系統(tǒng)中,存在很多樹形的數(shù)據(jù)。舉例來說,課程分類就是一個(gè)樹形結(jié)構(gòu),根節(jié)點(diǎn)為“全部分類”,在根節(jié)點(diǎn)下有一級(jí)分類節(jié)點(diǎn)如“國(guó)學(xué)、情商、藝術(shù)與品味修養(yǎng)、職業(yè)規(guī)劃、就業(yè)技能、創(chuàng)業(yè)創(chuàng)新”等等子分類欄目,而在國(guó)學(xué)這個(gè)子欄目下,又可細(xì)分為“名著賞析、孫子兵法智慧、周易智慧、五行學(xué)說”等等子欄目分類,依次類推。再舉一個(gè)例子,學(xué)校的組織結(jié)構(gòu),也就是學(xué)校下的各個(gè)院系,院系下細(xì)分的系和班級(jí)以及學(xué)校的各個(gè)行政架構(gòu)上的部門,班級(jí)下的學(xué)生,學(xué)校組織部門下的老師,這也是在在線教育系統(tǒng)中需要處理的層級(jí)比較深和數(shù)據(jù)量比較大的一個(gè)樹形數(shù)據(jù)結(jié)構(gòu)。此類樹形的數(shù)據(jù)結(jié)構(gòu),從根開始,每級(jí)有一個(gè)或者多個(gè)子分類,而每個(gè)子分類,又包含著層數(shù)不確定的更多的子分類。傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)一般是基于二維關(guān)系建立,比如我們常用的MySQL/Oracle/SQLServer等,按照傳統(tǒng)的方法存儲(chǔ)這種樹形數(shù)據(jù)記錄,應(yīng)用上非常繁瑣和不靈活。通常地,傳統(tǒng)的數(shù)據(jù)結(jié)構(gòu)在每條記錄上都存儲(chǔ)一個(gè)ParentId(即數(shù)據(jù)父節(jié)點(diǎn)與子節(jié)點(diǎn)的父子關(guān)系)的方法(AdjacencyList)建立,由于層級(jí)和子節(jié)點(diǎn)個(gè)數(shù)的不確定性,導(dǎo)致只能限制子節(jié)點(diǎn)的層級(jí)深度,然后在查詢類似“當(dāng)前節(jié)點(diǎn)屬于第幾層;當(dāng)前節(jié)點(diǎn)有多少個(gè)子節(jié)點(diǎn)(含子節(jié)點(diǎn)的子節(jié)點(diǎn));如何快速的將一個(gè)子節(jié)點(diǎn)(含子節(jié)點(diǎn))移動(dòng)到另外一個(gè)節(jié)點(diǎn)上;”等問題時(shí),傳統(tǒng)的技術(shù)方案需要大量的數(shù)據(jù)庫(kù)查詢和運(yùn)算,因此受到效率影響,很難做到無限層級(jí)的樹形數(shù)據(jù)結(jié)構(gòu)。[0003]為了便于理解,現(xiàn)以圖4的數(shù)據(jù)為例闡述上述的技術(shù)要領(lǐng)。我們采用每條記錄中增加一個(gè)ParentId來記錄節(jié)點(diǎn)的父子關(guān)系,數(shù)據(jù)表如圖5所示。這種簡(jiǎn)單設(shè)計(jì)能夠非常直觀和方便的查看數(shù)據(jù),也比較容易理清數(shù)據(jù)之間的父子關(guān)系。但是缺點(diǎn)也非常突出,對(duì)樹形結(jié)構(gòu)數(shù)據(jù)的任何創(chuàng)建、查詢、刪除、修改操作都主要依賴于遞歸操作,舉個(gè)具體應(yīng)用上的例子,yellow屬于第幾層?需要經(jīng)過的遞歸過程是:[0004]Select*fromtablewherename=,yellow,[0005]Select氺fromtablewherenode_id=ye11ow_parent_id[0006]Select氺fromtablewherenode_id=ye11ow_parent_id_parent_id[0007]…[0008]理論上講,由于每一個(gè)操作都依賴上一步操作的結(jié)果,因此,每次的數(shù)據(jù)庫(kù)查詢都是必須的,必須找到當(dāng)前的節(jié)點(diǎn)的父節(jié)點(diǎn),再找到父節(jié)點(diǎn)的父節(jié)點(diǎn)直至遞歸到根節(jié)點(diǎn)為止。此遞歸操作來完成數(shù)據(jù)庫(kù)增、刪、改、查的查詢效率太低,尤其在一個(gè)嵌套稍深的應(yīng)用場(chǎng)景下,每次數(shù)據(jù)庫(kù)的操作和I/o都會(huì)帶來極大的時(shí)間開銷,且難以支持靈活的數(shù)據(jù)擴(kuò)展和無限深度的子節(jié)點(diǎn)級(jí)聯(lián)。【
發(fā)明內(nèi)容】[0009]本發(fā)明的目的在于提供一種應(yīng)用于在線教育系統(tǒng)中的樹形數(shù)據(jù)結(jié)構(gòu)的建立方法,以解決上述問題。[0010]為了達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的:[0011]應(yīng)用于在線教育系統(tǒng)中的樹形數(shù)據(jù)結(jié)構(gòu)的建立方法,包括如下步驟:[0012]從根節(jié)點(diǎn)開始,按照從上到下,從左至右的順序,按照遞增數(shù)列規(guī)則依次給每一個(gè)節(jié)點(diǎn)定義一個(gè)用于識(shí)別的左編號(hào)數(shù)值Lft和右編號(hào)數(shù)值Rgt數(shù)值;[0013]根據(jù)節(jié)點(diǎn)的左編號(hào)數(shù)值Lft和右編號(hào)數(shù)值Rgt來查詢所述節(jié)點(diǎn)的子節(jié)點(diǎn)個(gè)數(shù),所述查詢公式為:R0UND((Rgt-Lft-遞增量)/2);[0014]創(chuàng)建樹形數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),建立與所述樹形數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)匹配的關(guān)系數(shù)據(jù)表。[0015]與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例的優(yōu)點(diǎn)在于:[0016]首先,節(jié)點(diǎn)在左、右編號(hào)數(shù)值存在的情況下,可以利用查詢公式ROUND((Rgt-Lft-遞增量)/2)快速的查詢數(shù)據(jù)庫(kù),與傳統(tǒng)的利用遞歸查詢數(shù)據(jù)庫(kù)的方法相t匕,大大提高了對(duì)樹形數(shù)據(jù)的增刪改查操作的效率。[0017]其次,在在線視頻教育系統(tǒng)中,通過節(jié)點(diǎn)左、右編號(hào)數(shù)值在關(guān)系數(shù)據(jù)庫(kù)中存儲(chǔ)樹形數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)課程欄目分類子欄目的無限級(jí)聯(lián);[0018]最后,在在線視頻教育系統(tǒng)中,通過節(jié)點(diǎn)左、右編號(hào)數(shù)值在關(guān)系數(shù)據(jù)庫(kù)中存儲(chǔ)樹形數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)組織結(jié)構(gòu)的無限級(jí)聯(lián)?!緦@綀D】【附圖說明】[0019]圖1為本發(fā)明實(shí)施例一提供的應(yīng)用于在線教育系統(tǒng)中的樹形數(shù)據(jù)結(jié)構(gòu)的建立方法的流程示意圖;[0020]圖2為本發(fā)明實(shí)施例一提供的應(yīng)用于在線教育系統(tǒng)中的樹形數(shù)據(jù)結(jié)構(gòu)的建立方法中簡(jiǎn)單有限級(jí)的樹形數(shù)據(jù)結(jié)構(gòu)示意圖;[0021]圖3為圖2的關(guān)系數(shù)據(jù)表;[0022]圖4為現(xiàn)有技術(shù)中例舉的一種簡(jiǎn)單有限級(jí)的樹形數(shù)據(jù)結(jié)構(gòu)示意圖;[0023]圖5為現(xiàn)有技術(shù)中用遞歸查詢法得到的圖4的關(guān)系數(shù)據(jù)表?!揪唧w實(shí)施方式】[0024]下面通過具體的實(shí)施例子并結(jié)合附圖對(duì)本發(fā)明做進(jìn)一步的詳細(xì)描述。[0025]參見圖1,本發(fā)明提供了一種應(yīng)用于在線教育系統(tǒng)中的樹形數(shù)據(jù)結(jié)構(gòu)的建立方法,包括如下步驟:[0026]步驟S100、從根節(jié)點(diǎn)開始,按照從上到下,從左至右的順序,按照遞增數(shù)列規(guī)則依次給每一個(gè)節(jié)點(diǎn)定義一個(gè)用于識(shí)別的左編號(hào)數(shù)值Lft和右編號(hào)數(shù)值Rgt數(shù)值;[0027]步驟S200、根據(jù)節(jié)點(diǎn)的左編號(hào)數(shù)值Lft和右編號(hào)數(shù)值Rgt來查詢所述節(jié)點(diǎn)的子節(jié)點(diǎn)個(gè)數(shù),所述查詢公式為:R0UND((Rgt-Lft-遞增量)/2);此時(shí),與每一個(gè)節(jié)點(diǎn)匹配的左、右編號(hào)使得此節(jié)點(diǎn)具有唯一性,同時(shí),還可以通過上述查詢公式快速的查詢數(shù)據(jù)庫(kù),極大的提高了效率。[0028]步驟S300、創(chuàng)建樹形數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),建立與所述樹形數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)匹配的關(guān)系數(shù)據(jù)表。[0029]本發(fā)明的應(yīng)用于在線教育系統(tǒng)中的樹形數(shù)據(jù)結(jié)構(gòu)的建立方法,按一定的規(guī)則對(duì)每一個(gè)節(jié)點(diǎn)進(jìn)行左、右編號(hào),節(jié)點(diǎn)在左、右編號(hào)數(shù)值存在的情況下,可以利用查詢公式ROUND((Rgt-Lft-遞增量)/2)快速的查詢數(shù)據(jù)庫(kù),與傳統(tǒng)的利用遞歸查詢數(shù)據(jù)庫(kù)的方法相t匕,大大提高了對(duì)樹形數(shù)據(jù)的增刪改查操作的效率。對(duì)應(yīng)到我們的在線視頻教育系統(tǒng)中,由于獲得了查詢效率的保障,因此,產(chǎn)品具體的表現(xiàn)上除了系統(tǒng)的響應(yīng)速度提高外,在功能特性上,也帶來了以下特點(diǎn):1、支持無限子級(jí)的課程類別細(xì)分;2、支持無限子級(jí)的組織結(jié)構(gòu)細(xì)分。[0030]下面對(duì)上述各步驟進(jìn)行詳細(xì)說明:[0031]實(shí)施例一[0032]參見圖2,為簡(jiǎn)單的有限級(jí)樹形數(shù)據(jù)結(jié)構(gòu)。[0033]首先,從根節(jié)點(diǎn)開始,按照從上到下,從左至右的順序,按照遞增數(shù)列規(guī)則依次給每一個(gè)節(jié)點(diǎn)定義一個(gè)用于識(shí)別的左編號(hào)數(shù)值Lft和右編號(hào)數(shù)值Rgt;當(dāng)設(shè)置根節(jié)點(diǎn)的初始值從I開始,增量為I時(shí),根據(jù)所述查詢公式:R0UND((Rgt-Lft-l)/2),得到圖2所示的節(jié)點(diǎn)左、右編號(hào)數(shù)值。較佳地,所述左編號(hào)數(shù)值Lft和右編號(hào)數(shù)值Rgt的編號(hào)規(guī)則,由CPU通過邏輯運(yùn)算實(shí)現(xiàn)。[0034]根據(jù)創(chuàng)建樹形數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),建立如圖3所示的關(guān)系數(shù)據(jù)表。[0035]實(shí)施例二[0036]所述樹形數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)為無限層級(jí)的樹形數(shù)據(jù)結(jié)構(gòu)。[0037]更多的應(yīng)用場(chǎng)景下,在新的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)下,我們來看一下我們?cè)趹?yīng)用中通常會(huì)遇到的幾個(gè)實(shí)際應(yīng)用場(chǎng)景對(duì)應(yīng)的解法。這里,我們以無限層級(jí)的樹形菜單數(shù)據(jù)為例來創(chuàng)建關(guān)系數(shù)據(jù)表如下:[0038]【權(quán)利要求】1.一種應(yīng)用于在線教育系統(tǒng)中的樹形數(shù)據(jù)結(jié)構(gòu)的建立方法,其特征在于,包括如下步驟:從根節(jié)點(diǎn)開始,按照從上到下,從左至右的順序,按照遞增數(shù)列規(guī)則依次給每一個(gè)節(jié)點(diǎn)定義一個(gè)用于識(shí)別的左編號(hào)數(shù)值Lft和右編號(hào)數(shù)值Rgt數(shù)值;根據(jù)節(jié)點(diǎn)的左編號(hào)數(shù)值Lft和右編號(hào)數(shù)值Rgt來查詢所述節(jié)點(diǎn)的子節(jié)點(diǎn)個(gè)數(shù),查詢公式為:ROUND((Rgt-Lft-遞增量)/2);創(chuàng)建樹形數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),建立與所述樹形數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)匹配的關(guān)系數(shù)據(jù)表。2.如權(quán)利要求1所述的應(yīng)用于在線教育系統(tǒng)中的樹形數(shù)據(jù)結(jié)構(gòu)的建立方法,其特征在于,所述左編號(hào)數(shù)值Lft和右編號(hào)數(shù)值Rgt的編號(hào)規(guī)則,通過cpu的邏輯運(yùn)算快速實(shí)現(xiàn)相關(guān)數(shù)據(jù)檢索由CPU通過邏輯運(yùn)算實(shí)現(xiàn)。3.如權(quán)利要求2所述的應(yīng)用于在線教育系統(tǒng)中的樹形數(shù)據(jù)結(jié)構(gòu)的建立方法,其特征在于,其中,所述遞增量為1,子節(jié)點(diǎn)數(shù)量的查詢公式為:R0UND((Rgt-Lft-1)/2)。4.如權(quán)利要求3所述的應(yīng)用于在線教育系統(tǒng)中的樹形數(shù)據(jù)結(jié)構(gòu)的建立方法,其特征在于,所述樹形數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)為無限層級(jí)的樹形數(shù)據(jù)結(jié)構(gòu)。5.如權(quán)利要求4所述的應(yīng)用于在線教育系統(tǒng)中的樹形數(shù)據(jù)結(jié)構(gòu)的建立方法,其特征在于,所述無限層級(jí)的樹形數(shù)據(jù)結(jié)構(gòu)為樹形的菜單數(shù)據(jù)?!疚臋n編號(hào)】G06F17/30GK103942267SQ201410116867【公開日】2014年7月23日申請(qǐng)日期:2014年3月26日優(yōu)先權(quán)日:2014年3月26日【發(fā)明者】王健申請(qǐng)人:上海德上網(wǎng)絡(luò)科技有限公司