为了账号安全,请及时绑定邮箱和手机立即绑定

数据库中购物车表和订单表的区别

数据库中购物车表和订单表的区别

PHP
人到中年有点甜 2023-03-26 14:09:01
我在网上商店网站上工作。我需要做一个购物车。我很困惑,为了制作购物车,我必须在我的数据库中制作一个购物车表(具有 customer_id、product_id、qty、price).. 然后当客户结账购物车时,我必须制作另一个表( order) 存储已签出的订单 ?? 那我必须做2张桌子,一张用来存放购物车,一张用来存放退房时的订单?将签出的订单存储在数据库中是合乎逻辑的(因为它不需要太多更新..)但是.. 将购物车存储在数据库中是否有效?想象一下,每当客户将商品添加到购物车时,我必须使用 INSERT 查询,然后当客户增加或减少数量时,我必须使用 UPDATE 查询,然后当客户删除购物车时 DELETE 查询......知道通常客户会多次添加到购物车,然后在没有结帐的情况下将其移除。也许他们改变了主意?什么是合乎逻辑的解决方案?谢谢您的帮助
查看完整描述

1 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

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

  • 如果用户未登录您的网站,您可以保存在他们的 cookie 本地存储中。

  • 如果用户通过身份验证,您可以从 cookie 中获取所有购物车并保存到您的数据库中

  • 如果没有登录付款,那么您不必在用户的 cookie 和数据库之间移动它们。

  • 如果用户可能从多个平台登录,而你想统一购物车,那么你需要将购物车保存在你的数据库(mysql 或任何其他数据库)中。

您可以使用其他数据库技术,例如redis带有过期选项的哈希。它非常快,我认为它涵盖了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>


查看完整回答
反对 回复 2023-03-26
  • 1 回答
  • 0 关注
  • 159 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信