首页 > 解决方案 > 数据库中购物车表和订单表之间的区别

问题描述

我正在开发一个在线商店网站。我需要做一个购物车。

我很困惑,为了制作购物车,我必须在我的数据库中制作一个购物车表(具有 customer_id、product_id、qty、price).. 然后当客户结账时,我必须制作另一个表( order) 存储已签出的订单??然后我必须做两张桌子,一张用来存放购物车,一张用来存放结账时的订单?

将签出顺序存储在数据库中是合乎逻辑的(因为它不需要太多更新..)

但是.. 将购物车存储在数据库中是否有效?想象一下,每当客户将商品添加到购物车时,我必须使用 INSERT 查询,然后当客户增加或减少数量时,我必须使用 UPDATE 查询,然后当客户删除购物车时,DELETE 查询......知道通常客户多次添加到购物车,然后在不结账的情况下删除.. 可能改变了主意?

什么是逻辑解决方案?

谢谢您的帮助

标签: phpmysqldatabase

解决方案


这取决于您的业务。如果您的业务需要;

  • 如果用户未登录您的网站,您可以将其保存在他们的 cookie 和本地存储中。
  • 如果用户通过身份验证,您可以从 cookie 中获取所有购物车并保存到您的数据库中
  • 如果没有登录付款,那么您不必在用户的 cookie 和数据库之间移动它们。
  • 如果用户可能从多个平台登录并且您想统一购物车,那么您需要将购物车保存在您的数据库(mysql或任何其他数据库)中。

您可以使用其他数据库技术,例如redis带有 expire 选项的哈希。它非常快,我认为它涵盖了cart.

  • 使用会话标识符创建哈希
  • 用于EXPIRE设置生存时间(可能是 24 小时) - O(1)
  • 用于HSET添加产品及其数量 - 每个字段/值的 O(1)
  • 用于HINCRBY增加金额 - O(1)
  • 用于HDEL删除具有各自数量的产品 - 单个字段的 O(1)
  • 用于HGETALL获取所有购物车。- O(N) 字段数。
127.0.0.1:6379> hset user:somesessionidentifier:cart productid:2 5
(integer) 1
127.0.0.1:6379> expire user:somesessionidentifier:cart 86400
(integer) 1
127.0.0.1:6379> ttl user:somesessionidentifier:cart
(integer) 86394
127.0.0.1:6379> hset user:somesessionidentifier:cart productid:3 1
(integer) 1
127.0.0.1:6379> hset user:somesessionidentifier:cart productid:92 1
(integer) 1
127.0.0.1:6379> hset user:somesessionidentifier:cart productid:5 1
(integer) 1
127.0.0.1:6379> hgetall user:somesessionidentifier:cart
1) "productid:2"
2) "5"
3) "productid:3"
4) "1"
5) "productid:92"
6) "1"
7) "productid:5"
8) "1"
127.0.0.1:6379> HINCRBY user:somesessionidentifier:cart productid:2 1
(integer) 6
127.0.0.1:6379> HDEL user:somesessionidentifier:cart productid:5
(integer) 1
127.0.0.1:6379> hgetall user:somesessionidentifier:cart
1) "productid:2"
2) "6"
3) "productid:3"
4) "1"
5) "productid:92"
6) "1"
127.0.0.1:6379>

推荐阅读