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

我在网上商店网站上工作。我需要做一个购物车。

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

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

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

什么是合乎逻辑的解决方案?

谢谢您的帮助


人到中年有点甜
浏览 116回答 1
1回答

撒科打诨

这取决于您的业务。如果您的业务需要;如果用户未登录您的网站,您可以保存在他们的 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) 1127.0.0.1:6379> expire user:somesessionidentifier:cart 86400(integer) 1127.0.0.1:6379> ttl user:somesessionidentifier:cart(integer) 86394127.0.0.1:6379> hset user:somesessionidentifier:cart productid:3 1(integer) 1127.0.0.1:6379> hset user:somesessionidentifier:cart productid:92 1(integer) 1127.0.0.1:6379> hset user:somesessionidentifier:cart productid:5 1(integer) 1127.0.0.1:6379> hgetall user:somesessionidentifier:cart1) "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) 6127.0.0.1:6379> HDEL user:somesessionidentifier:cart productid:5(integer) 1127.0.0.1:6379> hgetall user:somesessionidentifier:cart1) "productid:2"2) "6"3) "productid:3"4) "1"5) "productid:92"6) "1"127.0.0.1:6379>
打开App,查看更多内容
随时随地看视频慕课网APP