簡體   English   中英

二叉樹映射數據庫查詢

[英]binary tree mapping database query

我開發了一個用戶鏈,如圖所示。 在零級它有一個成員,一級二,二級有4,級別3有8個成員。就像明智的第9級將有512個成員,它是最后階段。

在程序化視圖中,要將成員的位置與他的右翼和左翼相互關聯到x級別,運行2^x查詢是可悲的。 (對於第9級,2 ^ 9個查詢將命中db)

有沒有其他方法可以減少db的命中率? 我們怎樣才能更好地映射成員之間的關系?

在此輸入圖像描述

在數據庫中存儲分層數據的優秀知識。

此外, HERE是一個類似的問題,有一些可靠的解決方案。

構造一個樹表和區域表。 樹表將包含父,子,邊作為列。 區域表包含用戶ID,區域(在其中應顯示所有區域,在本例中為9)和長度(從最頂層父節點開始的長度)作為列。 因此在區域表中,第1級節點將有一個條目,第2行節點將獲得兩個條目,同樣第9級將有9個條目。

現在,當必須顯示一個節點時,要檢索其下面的所有節點,寫一個查詢,如select * from zone where userid=xx現在用樹表映射該結果,以確定哪個節點位於哪個節點和哪一側。

以Parent-Child關系的形式從db獲取所有數據,然后將結果集存儲在Binary Tree中

Parent      Child
=====================
NULL        17265
17265       17270
17265       17394
17270       17796
17270       17797
...
...
...
...

現在使用它可以很容易地繪制二進制樹(事實上任何樹)
所以添加節點的函數原型看起來就像這樣

public void add(int parent, int child);

注意:
方法原型是Java語言。

在關系數據庫中,我會創建一個單獨的表

create table node(
  nodeid bigint not null primary key,
  nodeparent bigint references node ( nodeid ),
  nodegroup bigint,
  nodename varchar( 80 ),  // add attributes as needed
  );

執行諸如“SELECT * FROM node WHERE nodegroup = 17 ORDER BY nodeid”之類的查詢以獲取一個結果集中的所有節點。 掃描集合並在內存中創建樹。

哈喬

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM