购物车表需包含id、user_id、product_id、sku_id、quantity、selected及时间戳等核心字段,建议存储价格快照;同一用户对同一SKU应合并记录并建立唯一索引;可扩展shop_id、checked_stock等字段支持多店与库存校验;通过user_id及(user_id, selected)索引优化查询;购物车数据在订单生成时复制到订单明细表,确保订单独立不变,结构清晰即可满足多数电商需求。
购物车表的设计需要兼顾用户操作的灵活性和后续订单生成的准确性。核心是记录用户临时选中的商品信息,同时为结算流程提供可靠数据支持。
1. 明确购物车表的核心字段
一张合理的购物车表应包含以下关键信息:
- id:主键,自增或使用唯一ID(如UUID)
- user_id:关联用户表,标识归属用户
- product_id:关联商品表,标识具体商品
- sku_id:如果是多规格商品,需记录具体SKU
- quantity:购买数量,整数类型
- selected:布尔值,标记是否选中结算(如0未选,1已选)
- created_at 和 updated_at:记录创建和修改时间
如果商品价格可能变动,建议在加入购物车时快照当前价格,避免结算时价格不一致问题:
- price_snapshot:decimal类型,存储加入时的价格
2. 是否合并相同商品项
设计时需决定是否允许同一商品多次添加:
- 若每次添加都生成新记录,便于保留用户行为轨迹,但前端展示需合并处理
- 更常见做法是:同一用户、同一SKU只保留一条记录,添加时判断是否存在并更新数量
推荐后者,通过唯一索引约束保证数据整洁:
UNIQUE KEY `uid_sku` (`user_id`, `sku_id`)
3. 考虑扩展与性能优化
实际应用中可增加一些辅助字段提升体验:
- shop_id:多店铺场景下标识所属店铺
- checked_stock:标记库存是否校验通过,避免下单时缺货
- 可加状态字段区分“正常”、“失效”、“预售”等状态
为提升查询效率,建立必要索引:
- user_id 索引(最常用查询条件)
- 组合索引 (user_id, selected) 支持“查选中项”场景
4. 与其他表的关联逻辑
购物车不直接关联订单,而是在生成订单时将数据复制到订单明细表。这样保证订单数据的不可变性,同时清空或保留购物车条目由业务决定。
商品信息变更时,可通过定时任务或触发机制更新购物车中标记为“已失效”的条目。
基本上就这些,结构清晰、字段合理、索引到位,就能支撑大多数电商场景的购物车需求。