@fijj

Какой самый удобный способ реализации дерева категорий?

Возник вопрос реализации товарного дерева категорий. Всегда обычно использовал nested sets (вложенное множество ) или adjacency list (Список смежности). Если вдруг нужно поковырять базу руками такие структуры уже не очень удобны. Но в mysql есть же json поля, что если построить нужное дерево в видео json, но не понимаю как контролировать уникальность идентификатора категории в этом случае. Можно конечно для идентификатора использовать некий хеш. Но не будет ли тяжелой продуктовая таблица например на 500к позиций где category_id будет хеш. Или возможно есть какие то другие способы реализации?
  • Вопрос задан
  • 167 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Akina
Сетевой и системный админ, SQL-программист.
Но в mysql есть же json поля, что если построить нужное дерево в виде json

... то получится база, в которую удобно записывать, в которой удобно хранить, из которой удобно извлекать - и всё. Любые другие действия - поиск, изменение, сортировка, парсинг и пр.- совершенно неудобны. И с производительностью у них не очень. Так что лучше прикопать эту идею по-тихому, чтобы никто не заметил.

Кстати, ковыряние JSON руками... либо JSON не более сотни байт, либо ни разу не развлечение (если ты не мазохист, конечно).
Ответ написан
Комментировать
@Mylistryx
Adjacency List - для 1-2 уровневого меню.
Nested Sets (или Nested Trees) - для всего, что серьезней. Перестроение один раз, но выборка родителей и прочего гораздо удобней и без рекурсий\хранимых процедур.
Есть еще Mathearilzed Path - но там с хранением пути не очень, да и выборки так себе.
Для Yii2 есть шикарное решение: https://github.com/paulzi/yii2-auto-tree
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы