2010-10-08 82 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

相关问题