0

您好我想在 sql 数据库中创建一个树结构。我需要具有以下属性。

  • 快速选择
  • 仅使用 Cat2/Cat4 之类的字符串即可轻松选择 -> 返回 Cat5 和 Cat6
  • 支持虚拟类别
  • 插入应该很容易,但与快速选择相比并不重要
  • 删除与插入相同,简单会很好,但再次重要的是能够快速选择
  • 重新排序再次不如选择重要

替代文字

我查看了 Materialized-Path 和 hierarchyId,但大多数示例都使用 AdventureWorks 之类的示例,这对于我的需要来说太复杂了。

只是为了记录,我使用 Sql Server 2008 R2 和 C# 4.0

4

2 回答 2

1

SQL Server 支持递归 CTE,它们可能会对您有所帮助。

您可以使用以下 SQL 从数据中构建树结构:

WITH cat_tree AS (
  SELECT cat_id, cat_name, parent_id,
         0 AS level, CAST('0' AS varchar(90)) AS path
    FROM cats
   WHERE parent_id IS NULL
  UNION ALL
  SELECT c.cat_id, c.cat_name, c.parent_id,
      ct.level + 1,
      CAST(ct.path+'.'+CAST(
       (row_number() OVER (ORDER BY ct.cat_id)) AS varchar) AS varchar(90))
    FROM cats c
    JOIN cat_tree ct ON c.parent_id = ct.cat_id)
SELECT * FROM cat_tree
 ORDER BY path;

查看SQL Fiddle上的结果。

于 2012-05-20T22:51:20.693 回答
0

也许看看嵌套集?见乔塞尔科。

于 2012-05-20T22:21:23.650 回答