如何在SQL Server 2005中设置最佳层次结构?

3

我正在尝试为公司建立一个层次结构。我曾经使用 SQL Server 2008 并使用了 hierarchy id 来设置它。但现在我需要回到 SQL Server 2005...并且“只是这么做”...无论如何,我想以这种简单的方式设置它 -

Id | ParentId | CompanyName | Desc

其中ParentId是一个整型字段,用于存储父级的ID。我猜根节点会将ParentId设为零。有更好的方式来设置层次结构吗?

对于层次结构,我真的没有那么复杂的要求... 我只想知道遍历层次结构和更高效地处理它需要什么。

3个回答

1

很遗憾,据我所知,您设置的方式是正确的。现在您无法轻松地遍历链接,因为您失去了GetAncestor和GetDescendant。一个不错的替代方法是使用CTE递归地替换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


1

Joe Celko的嵌套集方法,其中您的表具有引用层次结构的“左”和“右”列,是我通常看到的做法。

Joe Celko可能会比我解释得更好嵌套集


1

“简单的方法”与CTE(公共表达式)配合使用效果良好。然而,正如Kev所建议的,还有其他方法,它们各有优缺点。

因此,最终取决于您的确切要求以及对数据进行插入和分层查询的数量,因为不同方法的性能在这方面可能会有很大差异。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接