2010-10-08 57 views
3

我試圖建立對公司的hierarchial結構。我正在使用SQL Server 2008並使用層次結構ID進行設置。但現在我需要搬回到SQL Server 2005 ...和「只管去做」 ...反正我想將其設置這種簡單的方式 -什麼是SQL Server 2005中設置層次結構的最佳方法?

Id | ParentId | CompanyName | Desc 

其中ParentId是將存儲的int字段父母的ID。我猜根目錄的ParentId爲零。有更好的方法來設置層次結構嗎?

我真的沒有了層次結構複雜的要求......我想知道,正是會使我猜遍歷雖然層次更容易,它更高效的工作。

+2

這就是方式,我會做 – 2010-10-08 15:24:15

回答

1

「簡單的方法」很好,並且與CTE(公用表表達式)一起工作良好。然而,正如Kev所建議的那樣,還有其他一些有利有弊的方法。

那麼到底這取決於您的具體要求,以及有多少插入與分層查詢將在數據上完成,因爲不同方法的性能可以改變很多在這方面。

1

喬·塞科的使用嵌套的集合,其中表中有「左」和「右」的列指的是層次結構是我怎麼也常常看到它做

的方法

喬·塞科可能會解釋它比好,我可以 Nested sets

1

不幸的是,據我知道你設置它的方式是正確的方法。您現在無法輕鬆遍歷鏈接,因爲您失去了GetAncestor和GetDescendant。一個體面的替代方法是使用熱膨脹係數,以取代GetAncestor和GetDescendant,並遞歸使用它們。

下面是一個例子(使用菜單層次):

WITH MenuCTE(MenuKey, ParentMenuKey, MenuName) AS 
(
-- Anchor Query 
SELECT MenuKey, ParentMenuKey, MenuName FROM Menu WHERE MenuKey = 1 
UNION ALL 
-- Recursive Query 
SELECT m.MenuKey, m.ParentMenuKey, m.MenuName FROM Menu m 
INNER JOIN MenuCTE r ON m.ParentMenuKey = r.MenuKey 
) 
SELECT MenuKey, ParentMenuKey, MenuName FROM MenuCTE 

這篇文章應該幫助(例如是從這裏開始):

http://www.infoq.com/news/2007/10/CTE

相關問題