2014-08-27 72 views
1

的最小數目現在我有以下表模式:獲取分層樹與查詢

Node_Id (INT)| NodeName (nvarchar(40)) | ParentNode(int, FK)

我想要從這個結構層次樹:結構simmilar這一個:{NodeId, NodeName, IEnumerable<Node> Children, bool hasChildren}

我看到了這個問題的兩個解決方案:首先是樹遍歷。我的意思是加載根節點(其中parent = null),然後爲每個節點加載它的子節點,並遞歸地爲這些節點執行此操作。但是每個子負載都會導致對性能影響的DB的額外查詢。

我看到的另一個選擇是從數據庫加載平面結構(與表模式相同),然後從它建立分層結構。這是應用程序服務器的性能。

我想知道是否還有其他解決方案?

回答

1

如果您不需要立即顯示所有的樹孩子,您可以根據指定的父節點加載,然後在用戶展開樹孩子時按需加載。這將導致應用程序和數據庫服務器的負載較輕。

+0

是的,我知道延遲加載的,那就是選擇。但是,如果可能的話,我想避免它,並立即加載樹 - 它有近15000個節點 - 不夠大。 – seeker 2014-08-27 10:08:20