Adjacency list, materialized path, nested sets, nested intervals -есть ли что-то поновее в мире вложенных категорий?
Adjacency list, materialized path, nested sets, nested intervals -есть ли что-то поновее в мире вложенных категорий?
Хочу для своего велосипедного интернет-магазина сделать наконец-то вменяемые категории-подкатегории.
Пока что пользую adjacency list - крайне удобно при прямой работе с БД и катастрофично долго и сложно при работе в админке и на сайте.
Вложенность 4 максимум.
Получать меню - быстрым и коротким запросом.
Получать хлебные крошки - аналогично.
Удаление категории со всеми вложенными - сейчас это выглядит как безумная простыня JOIN-ов
Редактирование категории в админке с одновременным задизабливанием тех подкатегории, которые лежат внутри - текущая боль для скрипта... Вернее, он вообще это не делает, скрипт не дает только сделать родителем самого себя. а вложенные вообще не проверяются, пока на стадии написании кода
Обнаружил, что манагеры случайно или со смыслом ставят для категории родителем саму себя - БД сходит с ума)) Или ставят родителем ту категорию, которая для неё вложенная - БД пищит как обиженный котенок.
Поделитесь алгоритмами, а то гитхаб уже банить стал за мои поиски)))
Обнаружил, что манагеры случайно или со смыслом ставят для категории родителем саму себя - БД сходит с ума)) Или ставят родителем ту категорию, которая доя неё вложенная - БД пищит как обиженный котенок.
что значит ставят? ты ж программист, запрети такое
так я запретил только одно - нельзя назначить саму себя родителем. а чтобы к категории найти все вложенные - вот тут пока ненавелосипедил.. в БД само собой не дает сохраниться, я имел ввиду в админке чтобы уже не давать сохранять неверные варианты...
кстати да, тоже думал про две таблицы, по аналогии как хранятся товар и картинки к нему...
статья таки 2013... где же умы планеты? за пять лет добавилась одна модель и всего их пять?)))
так и придумали все эти способы хранения чтобы легко было найти например все вложенные категории.
p.s. кстати в mysql 8 появилась рекурсия, по этому можно наверное и обычный Adjacency list использовать, особенно если нет супер сложных выборок