gpt4 book ai didi

database-design - 电子商务网站结账建模

转载 作者:行者123 更新时间:2023-12-01 06:06:30 25 4
gpt4 key购买 nike

通常,当客户点击电子商务网站上的“结账”按钮时,他们会经历如下结账流程:

  • 更新/确认购物车中的产品数量
  • 输入地址,选择送货方式
  • 输入信用卡详细信息
  • 查看所有订单详情,点击“确认”付款
  • 带有订单号的“谢谢”页面

  • 客户在结帐的第 4 步单击“确认”后,我们通常希望创建一些数据库对象,包括:
  • Order
  • Invoice (与对应的 Order 有关系)
  • Payment (与对应的 Invoice 有关系)

  • 我的第一个想法是应该发生这样的事情:
  • 创建 Order带有订单详细信息的对象
  • 创建 Invoice具有订单总成本的对象
  • 创建一个 Payment对象 status=PENDING并尝试从信用卡中扣款
  • 如果充电成功,更新Paymentstatus=SUCCESS并将客户重定向到“谢谢”页面
  • 如果充电失败,更新Paymentstatus=FAIL并将客户返回到第 4 步并显示错误消息

  • 但是这个流程存在一个问题:如果收费失败,客户返回第4步,重复 OrderInvoice如果他们再次单击“确认”以重新尝试付款,则会生成。

    为避免这种情况,我们可以修改此流程以仅创建一个新的 OrderInvoice如果它们不存在。然而,这样做的问题是用户可能会点击回到第 1 步,更改订单,然后再次尝试付款。在这种情况下, OrderInvoice对象将不正确,因为顺序已更改。

    所以为了避免这种情况,我们可以改为更新现有的 OrderInvoice如果它们已经存在,但这现在看起来过于复杂,并且还打破了发票应该是不可变的通用约定。

    对此建模的最佳方法是什么?

    最佳答案

    简单的答案 - 在确认交易之前什么都不会发生。如果信用卡没有通过,您再次尝试向他们展示带有相关错误消息的账单表格。这可能是一个简单的错误。或者可能是他们不会真正执行命令。

    “发票”意味着欠钱。实际上,这可能是一种有趣的方式来描述客户购物时的在制品订单。但是您处于最后一步,一旦交易完成,它只是一个订单。所以你不需要单独创建任何东西。

    ==========编辑

    嘿,我真的很感谢您在其他评论中详细说明发票要求 - 不知道。而且我仍然会反对在您知道会有订单之前必须创建订单的想法。

    否则 - 你为什么不在发票上做与付款一样的事情?交易完成后,发票似乎只是“不可变的”。所以有一个状态字段 - 待处理、成功、失败等,如果付款失败 - 在提交交易之前 - 您正在检查购物车等以重新确认所有总数,这非常重要。

    并且您需要让客户无法点击返回并更改订单。购物车必须有一个 token 或某种标识符才能使这成为不可能。

    此外,我强烈建议 - 如果订单发生变化 - 例如退货、换货等 - 您发出新订单。因为这种变化的一部分也说明了手头库存的变化。

    关于database-design - 电子商务网站结账建模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38260405/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com