我有一個樹狀結構表如下:如何獲取樹狀結構中所有父節點? (LINQ到實體)
CREATE TABLE [dbo].[Nodes](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](max) NOT NULL,
[ParentId] [bigint] NULL)
什麼是找到一個節點作爲父類標識的最小連接列表的路徑的有效途徑?
我的樹不會有更多的200個節點。
我有一個樹狀結構表如下:如何獲取樹狀結構中所有父節點? (LINQ到實體)
CREATE TABLE [dbo].[Nodes](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](max) NOT NULL,
[ParentId] [bigint] NULL)
什麼是找到一個節點作爲父類標識的最小連接列表的路徑的有效途徑?
我的樹不會有更多的200個節點。
我已經測試了深度爲30級的100,000條記錄的解決方案。 我得到樹的所有項目,然後遞歸獲取路徑直到。結束條件爲空的父級ID。大約需要4-5秒。這個持續時間是可以接受的,而樹表將存儲最多400條記錄。
這是一個相當複雜的問題,如果您需要允許任何級別的嵌套。
一個解決方案是「嵌套集」,它可以增加插入,更新和刪除的複雜性,以便查詢樹結構更簡單/更高效。
在這裏看到:http://www.codeproject.com/Articles/4155/Improve-hierarchy-performance-using-nested-sets
如果你設置了這種方式,查詢檢索,你需要將只是數據像
SELECT [Id]
FROM [dbo].[Nodes]
WHERE [LeftExtent] < @CurrentNodeLeftExtent
AND [RightExtent] > @CurrentNodeRightExtent
ORDER BY [LeftExtent]
如果這是一個有點太多了我見過的人將路徑作爲額外的列存儲在表中,作爲逗號分隔的ID列表。顯然這又意味着,只要插入,更新或刪除節點,就必須小心地更新這些內容。
是不是關於二叉樹@James?我的樹不是二元的,所以左右兒童不適用。對? – 2012-02-29 17:10:19
啊,「左」和「右」的名字可能有點混淆,但是嵌套集合理論適用於擁有任意數量孩子的樹木,而不僅僅是二叉樹。 – 2012-02-29 17:15:38
沒有任何代碼就沒有答案。 – 2016-03-15 10:54:07