Мы строили магазин как задачу поиска и цены, а не как витрину. Витрина у магазина запчастей нужна, но покупатель судит о нём по другому: нашлась ли деталь по номеру, который он ввёл, и честная ли цена.

Поэтому главное здесь — номер. Правила нормализации решают, найдёт ли магазин деталь, и их нельзя приделать потом, когда в базе уже лежат прайсы. Рядом с номером — цена: группа покупателя, наценка группы и НДС позиции считаются в выдаче, а не в корзине, чтобы оптовик сразу видел свою цену.

Наполнение мы строили так, чтобы оно не требовало людей. Поставщик сам загружает прайс любого размера, импорт идёт построчно и приводит цены к одному виду, а новые позиции попадают в поиск при первом запросе по номеру. Магазин, у которого каталог — это чужие прайсы, иначе превращается в вечную ручную сверку.

Работа над магазином закончилась в июне 2022 года. Код контроллеров и моделей — 6 723 строки на PHP с CodeIgniter и MySQL, и он обращается к 34 таблицам базы. Стек не новый, и это нормально: покупатель запчастей не видит фреймворк, он видит, нашлась ли деталь.