關於樹型結構資料遞迴查詢,轉非遞迴查詢的實現

萬康發表於2013-04-10

常見樹型表的基礎結構(表1): ID 節點編號 PID 所屬父節點編號

對這類樹型結構的資料進行查詢一般是遞迴,即: 輸入節點編碼,然後在一個遞迴查詢中串出所有子節點列表;

樹型表基礎表結構的改進(表2):

ID 節點編號 PID 所屬父節點編號 MarkNum 節點基數 LevelNum 節點所在層級數

MarkNum為節點基數字段 注:MarkNum受小數精度極限影響,可設為字串型別 LevelNum為節點所屬層級欄位 這兩個值的計算方式如下: N任意層的基數(0<N<=1) L層極數(L>=1) M倍數規則(M=1/2) enter image description here K同層同父的相鄰節點的增量 P 擴充套件小數位的長度(P=4),該值與同父子節點的個數相關,以P=4為例,同父子節點的個數為最大為999 W為任意層級數L實際保留小數的位數 W=L-2+(L-1)*P (L>=2) K=(1/10)W

同父各子節點基數計算方式如下: enter image description here N`同父的各子節點基數 I同父的子節點序列索引數(I>=1)

改進後的表節點查詢可以以非遞迴方式實現,即: 根據節點所在的基數和所屬層級數,這兩個引數進行指定的計算式來生成查詢操作所需的條件: 設R(N,L)為生成查詢條件 N為輸入節點的基數 L(L>=2)為輸入節點所屬層級數 round為sql標準函式 n 為表(2)中所有節點的基數集合 R(N,L) => 0== mod(N,round(n,W)) Λ L

本人技術能力有限,不足之處,請指教 basic_wan@163.com

相關文章