3

你好,我的程序员伙伴们,

我正在从头开始设计和编程一家在线商店。它有一个模块来管理通过前端收到的“订单”。

我需要有一个状态才能知道某个订单在某个时刻发生了什么,假设状态是:

  • 待付款
  • 已确认 - 等待发货
  • 已发货
  • 取消

我的问题是一个简单的问题,但对于决定商店设计非常重要,并且是:您将如何存储此状态:您会在 Orders 表中为其创建一个列还是只是“计算”状态每个订单是否已收到付款或是否已为每个订单发货?(除了我认为 is_cancelled 列)

模拟此类问题的最佳方法是什么?

PD:我什至希望将来可以配置这些状态,购买使用相同软件的其他客户端。

4

5 回答 5

2

Orders

基本原理是,如果Orders可以与多个Paymentsor相关联Invoices(取决于您的实现),那么 an 的状态与任何一个pending 或 completed都Order 没有绝对关系,因此不能直接计算Payment

即使没有收到任何付款,也可以Order将其标记为已付款已完成 。订单准确地代表了:向客户预定的发货。它不应该代表实际收入,而实际收入又是的域。Payments

确切的实施将取决于您的工作流程;我之前已经将“已完成”的订单视为付款的“替代品”,但它变得一团糟。尤其是当您进行促销活动或想要放弃库存并且必须考虑库存损失并且没有收到收入时。欢迎来到会计地狱。

Payment收到订单的 a 时,您的业务逻辑应该决定是否调整订单的状态。如果订单处于待处理状态并且现在收到的总付款总计等于或大于订单价值,Order则应将其标记为已付款,表明它已准备好发货。

总而言之:已完成Payments代表收入,而已完成Orders代表出货量和/或库存变化。

于 2010-04-02T14:08:45.337 回答
1

我会按顺序存储每一行​​的状态。您需要考虑是否有人订购了 2 件东西然后取消了其中一件。

于 2009-07-15T12:07:15.903 回答
1

如果你计算它,你应该计算它。否则,您将拥有冗余数据并冒着出现不一致的风险。

这并不是说出于性能原因或为了使查询更容易,您不能添加状态列,而是从没有它开始,并确保您的权威数据保持这种状态。就我个人而言,除非我能证明性能不够好,否则我更喜欢坚持使用计算查询方法。

于 2009-07-15T12:41:39.973 回答
0

你可以用我现在能想到的两种不同的风格来做:

选项一:

为订单创建一个表并根据状态的数量插入一个显示 0、1、2 或 3 的列。

在另一个表中,主键从 0 上升到 3(如上),下一个列说:状态为 varchar 或字符串,具体取决于您的 sql 服务器。在那里你可以插入诸如“待定”之类的东西

选项二:

您将其存储在每个订单的额外列中。根据订单数量,这是小商店的最佳解决方案。随着订单量越来越大,这需要越来越多的时间。

第二种解决方案较慢的原因是通常选择字符串比选择整数值慢。

问候

于 2009-07-15T12:19:10.233 回答
0

您的订单表中会有一个 status_id 列,然后是一个单独的 orders_status 表,其中包含 id 和状态描述:“待定,暂停”等。

完成订单后,您的付款模块会将状态设置为待处理。

我倾向于有另外两个领域:-

布尔值 ispaymentcompleted 指示订单是否已按付款条件实际完成并准备好进行处理。如果您仅在成功付款后保存订单详细信息,这不是问题。

然后我将有一个 isneworder 布尔字段,只是为了突出显示管理系统中的新订单,并快速确定需要处理的新订单。

PS。您确实需要跟踪订单的订单状态。动态计算会导致灵活性降低。这是我遇到的所有电子商务系统的标准实现。

于 2010-05-08T17:26:43.693 回答