我想将网页页面层次结构存储在表格中。
我想要实现的目标是有效的
1)按路径解析(最后有效)项目(例如“/blogs/programming/tags/asp.net,sql-server”,“/ blogs / programming / hello-world”)
2)获得breadcrump的祖先项目
3)编辑项目而不更新整个儿童,幼儿等树。
由于第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左右。
实现这一切的最佳方式是什么?
答案 0 :(得分:1)
你这样做的方式似乎很好,你可以利用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