你好我的同事们在那里,
我正在从头开始设计和编程在线商店。它有一个模块来管理通过前端收到的“订单”。
我需要有一个状态才能知道某个时刻订单发生了什么,让我们说状态是:
我的问题很简单,但决定商店设计非常重要,并且:你会怎么做才能保存这个状态:你会在Orders表中为它创建一个列,还是只是“计算” “每个订单的状态取决于是否已收到付款或已为每个订单发货? (除了我想的是一个is_cancelled列)
模拟此类问题的最佳方法是什么?
PD:我甚至希望将来能够配置这些状态,使用相同的软件购买其他客户。答案 0 :(得分:1)
我会根据订单中的每一行存储状态。 你需要考虑是否有人订购2件事然后取消其中一件。
答案 1 :(得分:1)
如果你可以计算它,你应该计算它。否则,您将拥有冗余数据,并存在不一致的风险。
这并不是说您无法为性能原因添加状态列或使查询更容易,而是在没有它的情况下启动并确保您的权威数据保持这种状态。我个人更喜欢坚持使用查询计算方法,除非我能证明性能不够好。
答案 2 :(得分:1)
Orders
理由是如果Orders
可以与多个Payments
或Invoices
相关联(取决于您的实施),那么Order
的状态会不与任何一个待处理或已完成 Payment
有绝对关系,因此无法直接计算。
Order
可以标记为付费或已完成 ,即使尚未收到任何付款。订单恰好代表:预定货件给客户。它不应代表实际收入,而域依次为<{>}
确切的实施将取决于您的工作流程;我之前已经将“已完成”的订单视为付款的“替代品”,但它会凌乱。特别是当你进行促销或想要放弃股票并且必须考虑到丢失的库存而没有收到收入时。 欢迎来到会计地狱。
当收到订单的Payments
时,您的业务逻辑应决定是否调整订单的状态。如果订单处于待处理状态且现在收到的付款总额等于或大于订单价值,则Payment
应标记为已付款,表示已准备好发货。
总结:已完成Order
代表收入,而已完成Payments
代表出货量和/或库存变化。
答案 3 :(得分:0)
你可以用两种不同的风格来做,我现在可以想到:
选项一:
为订单创建一个表,并根据状态数量插入一个表示0,1,2或3的列。
在另一个表中,主键从0升到3(如上所述),下一列表示:状态为varchar或字符串,具体取决于您的sql server。在那里你可以插入像'待定'
这样的东西选项二:
您可以在每个订单的额外列中存储它。根据订单的数量,这是小商店的最佳解决方案。随着订单量越来越大,这需要花费越来越多的时间。
第二种解决方案较慢的原因是通常选择字符串比选择整数值要慢。
问候
答案 4 :(得分:0)
您的订单表中会有一个status_id列,然后是一个单独的orders_status表,其中包含ID和状态说明:'待处理,暂停'等。
订单完成后,您的付款模块会将状态设置为待处理。
我倾向于有两个其他领域: -
布尔ispaymentcompleted指示订单是否已在付款条件中实际完成且已准备好进行处理。如果您仅在成功付款后保存订单详细信息,则不会出现此问题。
然后我将有一个isneworder布尔字段,只是为了突出显示管理系统中的新订单,并快速确定需要处理的新订单。
PS。您需要跟踪订单的订单状态。即时计算将导致灵活性降低。这是我遇到的所有电子商务系统的标准实施。