powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Nested Sets: Несколько корневых элементов
9 сообщений из 9, страница 1 из 1
Nested Sets: Несколько корневых элементов
    #35399238
Здравствуйте.
Господа, из-за достаточно накладных расходов при вставке, удалении, перемещении и прочее элементов в дерево, используя эту технологию, я решил попробовать произвести некую оптимизацию своего дерева

1. вместо дерева использую лес
2. разрешил появлению нескольких корневых элементов внутри одного дерева.
3. добавил поле с ИД непосредственного предка

то есть, было:
Код: plaintext
1.
2.
3.
4.
5.
CREATE TABLE  my_tree (
  id int unsigned NOT NULL,                              -- ID ноды
  level int unsigned NOT NULL,                           -- уровень
  left_key int unsigned NOT NULL,                      -- левый ключ
  right_key int unsigned NOT NULL);                   -- правый

стало:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE  my_tree (
  treeID int unsigned primary key,                      -- ID дерева "в лесе" (С)
  id int unsigned NOT NULL,                              -- ID ноды
  parentID int unsigned default NULL,                 -- ID первого (непосредственного) предка ноды
  level int unsigned NOT NULL,
  left_Key int unsigned NOT NULL,
  right_key int unsigned NOT NULL,

впринципе, регулируя факт создания нового дерева бизнес-логикой приложения, можно добить того, что максимальная вложенность (согла предметной области задачи разумеется) элементов, не будет превышать 100 элементов (level < 100 то есть), что вполне устраивает.

Однако, теперь появляется возможность иметь относительно одного дерева несколько корневых нод, то есть :
Код: plaintext
1.
2.
3.
4.
5.
________________________________________________
treeID  | id   | parentID|   level   | left_key   | right_key|
-------------------------------------------------------
 1             1            0              1            1                10                 -- первая "корневая нода"
 1             2            0              1            1                10                 -- ворая "корневая нода"

чисто технически это тоже работает, однако насколько подобная структура будет идеологически верной, с точки зрения теории Nested Sets ?

Следует ли убрать такую возможность (в одном дереве несколько корневых нод), либо же правильнее будет оставить только одну корневую ноду, а все остальные будут являться её потомками.

Спасибо
...
Рейтинг: 0 / 0
Nested Sets: Несколько корневых элементов
    #35399386
DDL создания индексов, ессно присутствует, но убран в целях минимизации места занимаемого постом...
...
Рейтинг: 0 / 0
Nested Sets: Несколько корневых элементов
    #35399844
Что-то не так с вопросом?
...
Рейтинг: 0 / 0
Nested Sets: Несколько корневых элементов
    #35399868
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Манго-МангоЧто-то не так с вопросом?А какой ответ Вам ждете ? Вы решили расширить метод "вложенных множеств" под конкретную ситуацию, добавив несколько "фенечек". Все работает ? Ну и слава Богу. Проблема-то в чем ?

P.S. IMHO, метод Nested Sets одним из самых неудачных способов реализации иерархических связей. Но это уже совсем другая тема.
...
Рейтинг: 0 / 0
Nested Sets: Несколько корневых элементов
    #35403753
ChA
P.S. IMHO, метод Nested Sets одним из самых неудачных способов реализации иерархических связей. Но это уже совсем другая тема.

хм, ну почему же, даже очень интересно... давайте её разовьём!
собственно Гугль на вопросы, подобные "сравнение Netsted и Adjacency List" (Материализованные пути... и т.д. в таком духе), выдаёт множество ссылок, следую по которым, можно прочетать, что Nested Sets всех даже очень и устраивают, если производить некие оптимизации (например, как сделал я, или же, например, такое извращение, как AL + NS ну и прочее).

Скажите пожалуйсат, Вам известен "самый удачный" способ хранения (у управление разумеется - добавление, удаление и перемещение) иерархических структур в реляционных БД?

Если да, то поделитесь пожалуйста просто названием этого метода.
...
Рейтинг: 0 / 0
Nested Sets: Несколько корневых элементов
    #35403988
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Манго-МангоСкажите пожалуйсат, Вам известен "самый удачный" способ хранения (у управление разумеется - добавление, удаление и перемещение) иерархических структур в реляционных БД?
Для начала различим иерархические связи между разными сущностями и иерархию внутри одной сущности - методы разные.
...
Рейтинг: 0 / 0
Nested Sets: Несколько корневых элементов
    #35404189
не вдаваясь в дальнейший анализ словоформ вытекающих из обсуждаемых абстракций, давайте ограничемся случаем, рассмотренным в этом треде.

то есть: "самый удачный способ" для реализации иерархических связей, по сравнению с Nested Sets

зы: при определённой степени абстрагирования, разные сущности можно трактовать как иерархически зависимые объекты внутри одной сущности, чем свести эти понятия к одному методу хранения, однако, этого не требуется (мы не рассматриваем здесь EAV-модели) сабжем этого треда
...
Рейтинг: 0 / 0
Nested Sets: Несколько корневых элементов
    #35404217
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Манго-Манго
Варианта всего 3:
1. Иерархия типа дерево внутри одной сущности - таблица со ссылкой родителя.
2. Граф: две таблицы: вершины и дуги с двумя ссылками на две вершины.
3. Иерархия между разными сущностями : одна таблица корневая + вложенные таблицы
...
Рейтинг: 0 / 0
Nested Sets: Несколько корневых элементов
    #35404537
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Манго-Манго ChAP.S. IMHO, метод Nested Sets одним из самых неудачных способов реализации иерархических связей. Но это уже совсем другая тема.

хм, ну почему же, даже очень интересно... давайте её разовьём!А смысл ? Поиском Вы и без меня пользоватся умеете, сравнивать, надеюсь, тоже. Да и статей со сравнениями навалом.
Собственно из первого поста
Манго-Мангоиз-за достаточно накладных расходов при вставке, удалении, перемещении и прочее элементов в дерево. Это и есть основной недостаток Nested Sets, только в нем добавление или удаление элемента может вызвать обновление LR-значений практически всех остальных элементов дерева, хотя остроту проблемы и можно несколько сгладить непоследовательной нумерацией пути обхода. Собственно, как эта, так и другие проблемы этого метода описаны во множестве статей, нет смысла их цитировать здесь.
* Когда-то тоже прельстился этим методом, но после некоторой практики отказался от него и, боюсь, навсегда. В частности, для многопользовательской работы он мало подходит, ну разве только для полностью статических "деревьев".

Манго-Мангособственно Гугль на вопросы, подобные "сравнение Netsted и Adjacency List" (Материализованные пути... и т.д. в таком духе), выдаёт множество ссылок, следую по которым, можно прочетать, что Nested Sets всех даже очень и устраивают, если производить некие оптимизации (например, как сделал я, или же, например, такое извращение, как AL + NS ну и прочее).Могу только повторить: устраивает, ради Бога, никто Вам не запрещает. Я высказал своё частное мнение, подкреплённое собственной же практикой. Если желаете холливар, то это не ко мне. Гораздо полезнее, IMHO, поиграть со всеми методами хранения, включая типовые запросы, в том числе и модификации иерархии, с изучением статистики выполнения. Для меня это уже пройденный этап, выводы для себя я уже сделал.
Манго-Манго ChAP.S. IMHO, метод Nested Sets одним из самых неудачных способов реализации иерархических связей. Но это уже совсем другая тема.Скажите пожалуйсат, Вам известен "самый удачный" способ хранения (у управление разумеется - добавление, удаление и перемещение) иерархических структур в реляционных БД?
Если да, то поделитесь пожалуйста просто названием этого метода.Из "одним из самых неудачных способов" вовсе не следует, что есть "самый удачный". Мой личный выбор - разворачивание иерархии, т.е., хранение для каждого элемента всех его предков в отдельной таблице, для определенных задач - с указанием уровня. Запросы на получение всех предков или потомков узла можно получить простейшим запросом. При этом вовсе не исключаю, что в определённых ситуациях откажусь от него в пользу, например, построения полного пути("материализации"). Кроме того, в большинстве СУБД уже есть поддержка иерархические(рекурсивных) запросов, при небольшой глубине иерархии это тоже вполне вариант.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Nested Sets: Несколько корневых элементов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]