Как организовать базу данных для корзины и заказов с учетом цен и скидок?

Таблицы имеющейся на данный момент:

Product

id title

Size

id title

Sku

id product_id size_id quantity

Схемы условные*

Есть предположения что сама корзина по сути это как неоформленный заказ, и после заказа, ее состояние сменяется, хотя есть и второй вариант развития событий, это когда после оформления все товар перебрасываются из одной таблицы (cart_product), в другую (order_product)


Ответы (1 шт):

Автор решения: citn

Если относится к поставленной задаче, как к коммерческому проекту, то можно сделать так:


Таблицы:

  1. Users: Какие-нибудь формальные колонки по типу user_id, username, password и т.п.;
  2. Products: product_id, name, discount, stock_quantity(кол-во товара на складе);
  3. Cart: cart_id(тут можно использовать user_id), created(когда корзина создана), updated(когда корзина была обновлена);
  4. cart_products(товары в корзине): cart_product_id, cart_id(user_id), product_id, quantity;
  5. orders: order_id, user_id, order_status, total_price(общая цена со скидкой);
  6. order_products: order_product_id(лучше у каждого из них будет свой id), order_id, product_id, quantity, price.

Что насчет подходов, что ты привел:

  • В принципе можно использовать корзину как неоформленный заказ, тогда можно использовать таблицу cart для хранения информации о корзине и таблицу cart_products для хранения товаров в корзине. А уже при оформлении заказа просто меняешь статус корзины и перемещаешь товары в таблицу order_products
  • С другой же стороны, если переносить товары из одной таблицы в другую, то в случае оформления заказа товары(в нашем случае таблицы) из cart_products можно скопировать в order_products, а после просто очищать корзину/удалять. В общем, если нужно сохранять историю заказов - выбирай второй вариант, если нужно управлять состоянием корзины и заказа в одном месте - первый
→ Ссылка