Materialized Path: Простой способ хранить деревья в базе данных.
Каждая запись в таблице хранит весь путь до корня в специальном текстовом поле (часто path). Путь формируется из ID предков, разделенных символом (обычно /, . или |). id | name | path ---|------------|--------- 1 | Животные | /1/ 2 | Кошки | /1/2/ 3 | Собаки | /1/3/ 4 | Сиамская | /1/2/4/ Путь /1/2/4/ говорит: "Сиамская (4) -> в Кошках (2) -> в Животных (1)".
Поиск потомков узла: `SELECT * FROM categories WHERE path LIKE '/1/2/%'
Поиск предков - разбиваем по символу разделителя. Для "Сиамская" это 1 и 2.
Плюсы:
- Очень просто для понимания и реализации.
- Быстрые вставки и обновления, если не нужно перестраивать потомков. А если и нужно - перестроение происходит только в рамках одной ноды.
Минусы:
- LIKE-запросы - могут быть медленными на большом количестве данных.
- Целостность - в отличие от nested-set нельзя быстро проверить, что все узлы "на месте".
- Сортировка потомков реализуется отдельно. У nested-set всегда можно отсортироваться по left для иерархии.
Отлично подходит для иерархий средней глубины и размера, где важна простота разработки (например, категории интернет-магазина, меню сайта, простые комментарии).`