Сущности / Древовидные сущности
Таблица дерева
Описание узла дерева с указанием родителя.
Поля:
- id – id узла
- parent_id – id узла-родителя, если нет, то NULL
- chain_id – id корневого узла цепочки, полезно для быстрого собирания конкретной ветки дерева по любому её узлу
- name – имя узла
- count – количество узлов потомков, полезно для отображения навигационных элементов дерева (нужен или не нужен плюсик для раскрытия ветки)
- ordd – порядок вывода узлов, необходим для организации управляемого вывода в нужном порядке узлов дерева
Например:
id | name | parent_id | chain_id | count |
1 | Узел1 | 1 | 2 | |
2 | Узел11 | 1 | 1 | 0 |
3 | Узел12 | 1 | 1 | 0 |
4 | Узел2 | 4 | 1 | |
5 | Узел21 | 4 | 4 | 1 |
6 | Узел211 | 5 | 4 | 0 |
Результат:
Узел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 у родительского узла, если он есть.