@SmokyA

Как хранить корзину авторизованного пользователя в БД?

Добрый день!
Пишу свой велосипед, то есть - идеальный интернет-магазин (по моим представлениям). Сейчас реализован функционал хранения корзины любого пользователя в сессиях. Реализую (в процессе) сохранение корзины авторизованного пользователя в БД Mysql.
Столкнулась с рядом вопросов:
1) Сейчас таблица users_cart в БД имеет поля user_id, product_id, data(NOW()), count.
2) product_id получается составной, генерится из id товара и id характеристик разных типов. Получается что-то вроде '1-pd331-pp5-pp8' и тд, где 1 - id самого товара и остальное - характеристики с префиксами.
В сессии сейчас лежит полностью вся корзина - с idшниками и конкретными данными типа цена, название характеристик и их значение, название и алиас товара и тд.
Получается, когда я из БД буду вытягивать этот товар по сборному idшнику, мне потом опять все это распиливать на части, собирать по кусочкам из базы и вновь склеивать, чтоб отдать клиенту корзину из БД.... Дороговато профит выходит, много лишних обращений к базе и нагрузки на систему в целом.
Уже думала, чтобы корзину загонять в json формате в БД целиком и потом вытягивать, сверяя цены и кол-во с наличным. Но тут тоже куча возможных конфликтов.
Посоветуйте, пожалуйста, как сделать сохранение корзины в БД чистым и безболезненным, без кучи лишнего кода...
  • Вопрос задан
  • 1783 просмотра
Решения вопроса 1
@infoguides
Храните товар как сущность (выделите все общее) а характеристики храните отдельно в таблице. Каждая характеристика будет у вас иметь, например, свою цену. Т.е базовая цена товара, плюс цена характеристики.

При добавлении товара в корзину, делаетй "снепшот" в базе, т.е

basket_items
order_id, product_id, characteristic_id

Если нужно выбрать не с одной а с несколькими характеристиками (например пицца с 10 ингридиентами) то таблица будет немного другая. Но суть таже.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@ipokos
А как у вас реализован учет товаров с разными атрибутами (разным размером, цветом и т.п.)?
Типа: большая зеленая коробка и маленькая красная, это у вас один товар или два?
Ответ написан
@vism
А что у вас будет, если пользователь положил в корзину товар при цене 1000р, а через неделю у вас новое поступление и цена же 3000р?)

надо полный снапшот делать.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
Wanted. Москва
До 200 000 ₽
div. Ставрополь
от 50 000 до 120 000 ₽
Lachestry Таганрог
от 170 000 до 200 000 ₽