Когда я ссылаюсь на вложенную модель набора, я имею в виду то, что описано здесь.
Мне нужно создать новую систему для хранения "категорий" (я не могу придумать лучшего слова для нее) в иерархии, определенной пользователем. Поскольку вложенная модель набора оптимизирована для чтения вместо записи, я решил использовать ее. К сожалению, во время моих исследований и тестирования вложенных наборов я столкнулся с проблемой того, как отобразить иерархическое дерево с отсортированными узлами. Например, если у меня есть иерархия:
root
finances
budgeting
fy08
projects
research
fabrication
release
trash
Я хочу, чтобы это было отсортировано так, чтобы оно отображалось как:
root
finances
budgeting
fy08
projects
fabrication
release
research
trash
Обратите внимание, что изготовление появляется перед исследованием.
В любом случае, после долгого поиска я увидел ответ, такой как "сохранить дерево в многомерном массиве и отсортировать его" и "прибегнуть к дереву и сериализоваться обратно в вашу вложенную модель набора" (я перефразирую...). В любом случае, первое решение - это ужасная трата памяти и процессора, которые являются как очень ограниченными ресурсами... Второе решение выглядит просто как больной код.
Независимо от того, мне удалось выяснить, как (используя модель вложенного набора):
- Запустить новое дерево в SQL
- Вставьте node в качестве дочернего элемента другого node в дереве
- Вставьте node после сиблинга node в дереве
- Потяните все дерево с иерархической структурой из SQL
- Вытяните поддерево из определенного node (включая root) в иерархию с ограничением глубины или без нее
- Найти родителя любого node в дереве
Итак, я решил, что # 5 и # 6 можно использовать для сортировки, которую я хотел, и она также может быть использована для восстановления дерева в отсортированном порядке.
Однако теперь, когда я просмотрел все эти вещи, которые я научился делать, я вижу, что # 3, # 5 и # 6 могут использоваться вместе для выполнения отсортированных вставок. Если бы я отсортировал вставки, он всегда сортировался. Однако, если я когда-либо изменю критерии сортировки или хочу другой порядок сортировки, я вернусь к квадрату.
Может ли это быть ограничением вложенной модели набора? Использует ли его использование в сортировке запросов на выход?