搜索分层数据的最佳方法

WDu*_*ffy 7 c# asp.net sql-server-2005 recursive-query

我正在寻找建立一个允许使用分层过滤查询数据的工具.我有一些想法,我将如何去做,但想知道是否有任何建议或建议可能更有效.

例如,假设用户正在搜索作业.工作领域如下.

1: Scotland
2: --- West Central
3: ------ Glasgow
4: ------ Etc
5: --- North East
6: ------ Ayrshire
7: ------ Etc
Run Code Online (Sandbox Code Playgroud)

用户可以搜索特定的(即格拉斯哥)或更大的区域(即苏格兰).

我正在考虑的两种方法是:

  1. 在每个记录的数据库中记下子项的注释(即cat 1在其子域中将有2,3,4)并使用a查询该记录SELECT * FROM Jobs WHERE Category IN Areas.childrenField.
  2. 使用递归函数查找与所选区域有关系的所有结果.

我从两者看到的问题是:

  1. 在数据库中保存此数据意味着必须跟踪结构的所有更改.
  2. 递归是缓慢且无效的.

关于最佳方法的任何想法,建议或建议?我正在使用C#ASP.NET和MSSQL 2005 DB.

unc*_*l84 3

这是我见过的一种方法:

创建一个名为 hierarchyid 的 varchar(max) 字段。为所有根对象生成基本 ID。为每个子对象生成一个 id 并在其前面添加父对象 id。

示例表

ID(PK) HierarchyID Area
1       sl           Scotland 
2       slwc        West Central
3       slwcgg       Glasgow 
Run Code Online (Sandbox Code Playgroud)

查询示例

SELECT * FROM Areas Where HierarchyID LIKE 'sl%'
Run Code Online (Sandbox Code Playgroud)

  • 在 SQL Server 2008 中,他们引入了一种数据类型 HierarchyID 来处理这种方法:http://msdn.microsoft.com/en-us/magazine/cc794278.aspx (2认同)