Sql server 2008 在SQLServer2008中存储网站层次结构

Sql server 2008 在SQLServer2008中存储网站层次结构,sql-server-2008,Sql Server 2008,我想在表中存储网站页面层次结构 我想要实现的是高效 1) 按路径解析(最后有效)项(例如“/blogs/programming/tags/asp.net,sql server”、“/blogs/programming/hello world”) 2) 获取面包屑的祖先项目 3) 编辑一个项目而不更新整个子项树、子项树等 因为第三点,我认为桌子可能是这样的 ITEM id type slug title parentId 1

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

我想要实现的是高效
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左右


实现这一切的最佳方法是什么?

您这样做似乎很好,可以使用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