Nested Tree (Вложенное Дерево)

Nested Tree (чаще называют Nested Sets или "Вложенные множества") — это модель хранения иерархических данных (например, деревьев) в реляционных базах данных. Каждый узел дерева представлен двумя числовыми метками: left (левый ключ) и right (правый ключ), которые определяют его положение в иерархии. A (1, 10) / B(2,3) C(4,9) / D(5,6) E(7,8) A: left=1, right=10 B: left=2, right=3 C: left=4, right=9 D: left=5, right=6 E: left=7, right=8

Преимущества:

  • Быстрое чтение поддеревьев `SELECT * FROM nodes WHERE left > {node.left} AND right < {node.right}
  • Определение уровня вложенности (глубины) `SELECT COUNT(*) FROM nodes WHERE left < {node.left} AND right > {node.right}
  • Эффективная сортировка Узлы автоматически упорядочены по left, что соответствует порядку обхода дерева "в глубину".
  • Простота JOIN-операций
  • Нет рекурсии

Недостатки:

  • Сложность модификации Добавление/перемещение узла требует пересчета left/right у многих элементов (дорого при частых изменениях).
  • Риск нарушения целостности Некорректное обновление меток может сломать иерархию.

Оптимально: Для деревьев с редкими изменениями и частыми чтениями (например, каталоги товаров, меню сайта).

https://github.com/doctrine-extensions/DoctrineExtensions/blob/main/doc/tree.md``