Общие > Базы данных
Обсуждение статьи ДЕРЕВО КАТАЛОГОВ NESTED SETS (ВЛОЖЕННЫЕ МНОЖЕСТВА) И УПРАВЛЕНИЕ ИМ
Макс:
Dmitry Zlygin
цитата из статьи :
--- Цитировать ---На схеме представлено дерево, описанное по всем правилам метода "Вложенных множеств". Квадратами обозначены узлы дерева, синие цифры в верхнем правом и верхнем левом углах узла - уровень и уникальный идентификатор соответственно, а красные цифры в нижних углах - это левый и правый ключ. Именно в этих двух цифрах - левом и правом ключе заложена вся информация о дереве. И если информацию о ключах занести в базу данных, то работа с деревом намного упрощается.
Обратите внимание на то, в каком порядке проставлены эти ключи. Если мысленно пройтись по порядку от 1 до 32, то вы обойдете все узлы дерева слева направо. Фактически это путь обхода всех узлов дерева слева направо.
--- Конец цитаты ---
последний абзац + картинка объясняют всю суть метода. Посмотри на картинку, пройдись мысленно по цифрам, подумай, еще раз подумай.
Можешь еще почитать начало статьи на http://detail.phpclub.ru/article/db_tree . Если и оттуда ничего не поймешь, то я объяснить ничего тебе не смогу.
Dmitry Zlygin:
2 Макс - спасибо за попытку объяснить, но лучше написано в документе, на который я привожу ссылку ("Древовидные структуры в SQL", по материалам статьи Joe Celko "Trees in SQL").
Понимаете, Макс, когда Phoinix пытается рассказать о nested sets, он не достигает понятности (плохой учитель :) ). Хотя в статье, на которую вы ссылаетесь, все же понятнее, чем у него. Ниже - объяснение еще проще, становится сразу понятным название метода хранения деревьев - "вложенные множества".
--- Цитировать ---
Чтобы изобразить древовидную структуру в виде вложенных множеств, заменим вершины графа овалами, где подчиненные овалы вложены один в другой. Основание дерева будет представлено самым большим овалом, который содержит все остальные овалы. Концевые вершины будут представлены самыми внутренними овалами, не содержащими внутри никаких других овалов, а вложенность будет показана иерархическими взаимоотношениями. Поля rgt и lft (я не использую зарезервированные слова RIGHT и LEFT) - это именно то, что показывает вложенность.
Если эта образная модель не работает, то представьте себе маленького червя, ползущего вдоль дерева против часовой стрелки. Каждый раз, когда он достигает правую или левую сторону вершины, он нумерует ее. Червь останавливается после того, когда он обойдет вокруг всего дерева и вернется назад к основанию.
... немного далее ...
Для преобразования графа в модель вложенных множеств вспомните о маленьком червячке, ползущем вдоль дерева. Червь начинает двигаться сверху - от основания - и обползает вокруг всего дерева. Когда он приходит к вершине, он присваивает значение стороне, которую он посещает и увеличивает значение счетчика на единицу. Каждая вершина получает два значения - одно для правой стороны и одно для левой.
--- Конец цитаты ---
Макс:
всем не угодишь. Мне например пример с овалами совсем не нравится (хотя он объясняет суть названия метода).
А про червяка согласен, сам по нему разбирался.
Phoinix:
Dmitry Zlygin
--- Цитировать ---Понимаете, Макс, когда Phoinix пытается рассказать о nested sets, он не достигает понятности (плохой учитель ). Хотя в статье, на которую вы ссылаетесь, все же понятнее, чем у него. Ниже - объяснение еще проще, становится сразу понятным название метода хранения деревьев - "вложенные множества".
--- Конец цитаты ---
Возможно Вы и правы, но основное направление статьи - не что такое Nested Sets, а как ими управлять...
Можно конечно глупо скопировать статью, ссылку на которую дал Макс (собственно первые абзацы так и сделаны), потом дописать свое... Тогда вопрос: А почему в статье не описан сам принцив SQL запросов и что это такое, и вообще что за базы данных...
--- Цитировать ---Вы не беспокойтесь, уважаемый, дорогу к поисковикам как-то и сами
--- Конец цитаты ---
Вот, Вот... Если что-то не понятно, то вперед в поисковики, если не помогло, тогда уже к автору за пояснениями...
P.S. Вообще непонятено рассуждение Dmitry Zlygin.
Если человеку, что-то не понятно, он может это спросить, у меня, лично, нет желания от кого-то что-то прятать, скрывать и доказывать, что он дурак, а я умный, раз ничего не понял из того что я написал.
Только как человек спрашивает, такой ответ он и получает.
Я знаю как работать с деревьями Nested Sets, Вы нет.
Я написал статью, которая по моему мнению, достаточно понятно раскрывает тему. Вы что-то не поняли из этой статьи. Я оскорбил Ваше самолюбие? Извините, не хотел...
У Вас возникли вопросы по ходу статьи, задавайте их, коментарии для того и существуют, для того, что бы делать уточнения, но никак не ставить оценку статье...
Гость:
Привет всем!
Статья очень хорошая, написана очень хорошо, но к сожалению в ней неописано решение одной пролемы которая возникает у меня (да наверное не только у меня) при использовании этого алгоритма
Проблема в следующем
Как с помощью одного запроса получить всех список разделов дерева с указанными ID родителя для каждого узла. То есть
ID | ID parent | left_key | right_key | level
где ID parent - ID родительского узла.
Поясню для чего это мне надо
Вместе с сами алгоритмом для визульного представления я использую JS класс dTree который позволяе создавать меню типа проводника Windows.
Вот здесь то и требуеться для каждого пункта меню указывать ID его родителя.
Пока что делаю так
1)Запрашиваю список всех разделов
2)Для каждого раздела отдельным запросом определяю ID родителя.
Пока что всё нормально, но если в дереве будет штук 500 разделов то это 500 запросов в одном сценарии.Ужас!
Может кто то решил эту проблему?
Подскажите решение.
Спасибо!
Навигация
Перейти к полной версии