代码之家  ›  专栏  ›  技术社区  ›  Mike Koder

在SQL Server 2008中存储网站层次结构

  •  3
  • Mike Koder  · 技术社区  · 16 年前

    我想将网站页面层次结构存储在表中。

    我想达到的是高效
    1)按路径解析(最后一个有效的)项目(例如“/blogs/programming/tags/asp.net,SQL Server”,“/blogs/programming/hello world”)。
    2)获取面包屑的祖先项
    3)编辑一个项目,不更新整个儿童、孙子等树。

    因为第三点,我认为桌子可以像

    ITEM
    id    type        slug           title               parentId
    1     area        blogs          Blogs
    2     blog        programming    Programming blog    1
    3     tagsearch   tags                               2
    4     post        hello-world    Hello World!        2
    

    我是否可以以某种方式使用SQL Server的hierarchyID类型(尤其是第1点,“/blogs/programming/tags”是最后一个有效项)?
    树的深度通常在3-4左右。

    实现这一切的最佳途径是什么?

    1 回复  |  直到 16 年前
        1
  •  1
  •   Adriaan Stander    16 年前

    这样做似乎很好,您可以使用CTE递归函数为您创建层次结构。

    类似的东西

    DECLARE @ITEM  TABLE(
            id INT,
            type VARCHAR(20),
            slug VARCHAR(50),
            title VARCHAR(50),
            parentId  INT
    )
    
    INSERT INTO @ITEM SELECT 1,'area','blogs','Blogs', NULL
    INSERT INTO @ITEM SELECT 2,'blog','programming','Programming blog',1 
    INSERT INTO @ITEM SELECT 3,'tagsearch','tags',',',2 
    INSERT INTO @ITEM SELECT 4,'post','hello-world','Hello World!',2 
    
    ;WITH Items AS (
            SELECT  *,
                    CAST('/' + slug + '/' AS VARCHAR(50)) PathVal
            FROM    @ITEM
            WHERE   parentId IS NULL
            UNION ALL
            SELECT  i.*,
                    CAST(Items.PathVal + i.slug + '/' AS VARCHAR(50))
            FROM    Items INNER JOIN
                    @ITEM i ON i.parentId = Items.ID
    )
    
    SELECT  *
    FROM    Items
    
    推荐文章