Хранение иерархии веб-сайтов в Sql Server 2008 - PullRequest
3 голосов
/ 02 апреля 2010

Я хочу сохранить иерархию страниц сайта в таблице.

То, чего я хотел бы добиться, это эффективно
1) разрешить (последний действительный) элемент по пути (например, "/blogs/programming/tags/asp.net,sql-server", "/ blogs / software / hello-world")
2) получить предок предметов для хлебной крошки
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 (особенно пункт 1, "/ blogs / software / tags" - последний действительный элемент)?
Глубина дерева обычно составляет около 3-4.

Каков наилучший способ добиться всего этого?

1 Ответ

1 голос
/ 02 апреля 2010

То, как вы это сделали, выглядит хорошо, вы можете использовать рекурсивные функции 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...