Каков наилучший способ настройки иерархии в SQL Server 2005? - PullRequest
3 голосов
/ 08 октября 2010

Я пытаюсь настроить иерархическую структуру для компании.Я использовал SQL Server 2008 и использовал идентификатор иерархии для его настройки.Но теперь мне нужно вернуться к SQL Server 2005 ... и "просто сделать это" ... В любом случае, я думал о настройке этого простого способа -

Id | ParentId | CompanyName | Desc

, где ParentId - это intполе, в котором будет храниться идентификатор родителя.Я предполагаю, что корень будет иметь ParentId как ноль.Существуют ли более эффективные способы настройки иерархической структуры?

У меня действительно нет таких сложных требований к иерархии ... Я хочу знать, что заставило бы я предположить, что обход иерархии проще и работа с ней болееэффективный.

Ответы [ 3 ]

1 голос
/ 08 октября 2010

«Простой способ» хорош и хорошо работает с CTE (Common Table Expression). Однако, как предполагает Кев, есть и другие способы, которые имеют свои плюсы и минусы.

Таким образом, в конечном итоге это зависит от ваших точных требований и от того, сколько запросов данных будет выполнено по сравнению с иерархическими запросами, поскольку производительность различных подходов может сильно различаться в этом отношении.

1 голос
/ 08 октября 2010

К сожалению, насколько я знаю, способ, которым вы его настраиваете, является правильным.Теперь вы не можете проходить ссылки так легко, потому что теряете GetAncestor и GetDescendant.Достойной заменой является использование CTE для замены GetAncestor и GetDescendant и их рекурсивное использование.

Вот пример (с использованием иерархии меню):

WITH MenuCTE(MenuKey, ParentMenuKey, MenuName) AS
(
-- Anchor Query
SELECT MenuKey, ParentMenuKey, MenuName FROM Menu WHERE MenuKey = 1
UNION ALL
-- Recursive Query
SELECT m.MenuKey, m.ParentMenuKey, m.MenuName FROM Menu m
INNER JOIN MenuCTE r ON m.ParentMenuKey = r.MenuKey
)
SELECT MenuKey, ParentMenuKey, MenuName FROM MenuCTE

Эта статья должна помочь (примеротсюда):

http://www.infoq.com/news/2007/10/CTE

1 голос
/ 08 октября 2010

Метод Джо Селко, использующий вложенные множества, где в вашей таблице есть столбцы «левый» и «правый», относящиеся к иерархии, - это то, как я обычно это делал

Джо Селко, вероятно, объяснит это лучше, чем я Вложенные множества

...