Как организовать базу данных для корзины и заказов с учетом цен и скидок?
Таблицы имеющейся на данный момент:
Product
| id | title |
|---|
Size
| id | title |
|---|
Sku
| id | product_id | size_id | quantity |
|---|
Схемы условные*
Есть предположения что сама корзина по сути это как неоформленный заказ, и после заказа, ее состояние сменяется, хотя есть и второй вариант развития событий, это когда после оформления все товар перебрасываются из одной таблицы (cart_product), в другую (order_product)
Ответы (1 шт):
Автор решения: citn
→ Ссылка
Если относится к поставленной задаче, как к коммерческому проекту, то можно сделать так:
Таблицы:
Users: Какие-нибудь формальные колонки по типуuser_id,username,passwordи т.п.;Products:product_id,name,discount,stock_quantity(кол-во товара на складе);Cart:cart_id(тут можно использоватьuser_id),created(когда корзина создана),updated(когда корзина была обновлена);cart_products(товары в корзине):cart_product_id,cart_id(user_id),product_id,quantity;orders:order_id,user_id,order_status,total_price(общая цена со скидкой);order_products:order_product_id(лучше у каждого из них будет свой id),order_id,product_id,quantity,price.
Что насчет подходов, что ты привел:
- В принципе можно использовать корзину как неоформленный заказ, тогда можно использовать таблицу
cartдля хранения информации о корзине и таблицуcart_productsдля хранения товаров в корзине. А уже при оформлении заказа просто меняешь статус корзины и перемещаешь товары в таблицуorder_products - С другой же стороны, если переносить товары из одной таблицы в другую, то в случае оформления заказа товары(в нашем случае таблицы) из
cart_productsможно скопировать вorder_products, а после просто очищать корзину/удалять. В общем, если нужно сохранять историю заказов - выбирай второй вариант, если нужно управлять состоянием корзины и заказа в одном месте - первый