Сущности / Древовидные сущности


Таблица дерева

Описание узла дерева с указанием родителя.


Поля:

  • id – id узла
  • parent_id – id узла-родителя, если нет, то NULL
  • chain_id – id корневого узла цепочки, полезно для быстрого собирания конкретной ветки дерева по любому её узлу
  • name – имя узла
  • count – количество узлов потомков, полезно для отображения навигационных элементов дерева (нужен или не нужен плюсик для раскрытия ветки)
  • ordd – порядок вывода узлов, необходим для организации управляемого вывода в нужном порядке узлов дерева

Например:

idnameparent_idchain_idcount
1Узел1 12
2Узел11110
3Узел12110
4Узел2 41
5Узел21441
6Узел211540

Результат:

Узел1
  Узел11
  Узел12
Узел2
  Узел21
    Узел211


Поля chaint_id и count желательно заполнять тригерно.
При создании узла дерева поле chaint_id заполнять по след. алгоритму:

  • если новое поле корневое (нет parent_id), то chaint_id должно равняться id этого же узла;
  • если новое поле не корневое (есть parent_id), то chaint_id должно равняться chaint_id родительского узла;

Поле count должно изменяться только при добавлении или удалении узла, по следующему алгоритму:

  • при добавлении увеличить на 1, а при удалении уменьшить на 1 поле count у родительского узла, если он есть.