Пишу свой велосипед, маршрутизацию для интернет-магазина. Задача стоит такая: есть таблица категорий товаров с полями category_id, parent_id, slug и т. д. В категорию можно перейти по get-параметрам указав контроллер и category_id, либо по ЧПУ. Изначально было задумано парсить ЧПУ и рекурсивно обходить категории в поиске category_id последнего сегмента (название сегментов, т. е. slug будет уникально для каждого уровня). Конечно же при каждом запросе выполнять рекурсивный поиск категории не лучшая идея, поэтому я решал делать это один раз при сохранении и записывать готовый маршрут в таблицу c полями (category_id, route). И уже при запросе проверить наличие данного маршрута в этой таблицы получить category_id. Так вот, насколько это удачное решение проблемы, таблица может сильно разрастись и время поиска возрастет. Я знаю, если известно число сегментов ЧПУ маршрут можно определить по шаблону, например /blog/{article_id}. Но если число сегментов заранее не известно, надо как-то хранить эти адреса. Как лучше это реализовать? Посоветуйте актуальные практики или может существует более элегантное решение.
Если это интеренет-магазин, то лучше всё таки определиться с максимальным числом сегментов. один сегмент - высокочастотные запросы, два - среднечастотные, а три (уже с конкретным товаром) - низкочастотные.