[英]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.