我的电子商务应用程序中应该有一个购物车 table,还是只有未结订单状态?

Should I have a cart table in my e-commerce app, or just have an open order status?

我正在开发一个电子商务应用程序,在设计数据库模式时,我偶然发现了两个关于存储购物车数据的问题。

首先,有没有理由同时拥有购物车和 cart_line table? 我明白为什么这是通过订单之类的事情来完成的。它显然可以防止跨多个订单行的重复数据(订单号、订单日期、user/account、状态等),方法是将其替换为单个外键 orderID.

但是唯一可以跨购物车行共享的数据(我预见到)是用户。 因此,与其在购物车行中存储对 cartID 的引用,不如仅存储用户 ID 并完全消除购物车 table?

我是否忽略了拥有专用购物车的另一个​​好处 table?

其次,思考这个问题让我想知道我是否需要推车线 table。 如果订单有状态,为什么不直接有一个 'open' 状态并为用户购物车使用未结订单?

我意识到这意味着搜索(更大的)order_lines table 而不是 cart_lines table 来检索用户的购物车。我只是想知道这实际上会有多大的不同。如果使用订单 table 存储购物车数据可能是正常做法。

任何反馈或讨论将不胜感激。 :)

这样做的一个常见原因是允许一个用户 "more than one cart." 有时用户确实需要 "park" 一个未完成的订单并在返回到未完成的订单之前下另一个订单以完成或丢弃它。

因此,用户和购物车之间存在一对多关系,并且购物车与其包含的项目之间存在一对多关系。

现在...我还强烈建议您花时间查看现有的 电子商务框架,使用您选择的语言。不要不必要地重新发明轮子。