Database design 电子商务网站结帐建模
通常,当客户单击电子商务网站上的“结帐”按钮时,他们会经历如下结帐过程:Database design 电子商务网站结帐建模,database-design,language-agnostic,e-commerce,Database Design,Language Agnostic,E Commerce,通常,当客户单击电子商务网站上的“结帐”按钮时,他们会经历如下结帐过程: 更新/确认购物车中的产品数量 输入地址,选择配送方式 输入信用卡详细信息 查看所有订单详细信息,单击“确认”进行付款 带有订单号的“谢谢”页面 在客户单击签出步骤4上的“确认”后,我们通常希望创建一些数据库对象,包括: 订单 发票(与相应的订单相关) 付款(与相应的发票相关) 我的第一个想法是应该发生这样的事情: 使用订单详细信息创建一个Order对象 使用订单的总成本创建一个发票对象 创建一个状态为“待定”的Paym
订单
(与相应的发票
订单相关)
(与相应的付款
相关)发票
Order
对象发票
对象Payment
对象,并尝试向信用卡收费付款
更新为状态=成功
,并将客户重定向到“谢谢”页面付款更新为状态=失败
,并将客户返回到步骤4,并显示错误消息
订单
和发票
为了避免这种情况,我们可以修改此流程,仅创建新的订单
和发票
(如果它们不存在)。但是,问题是用户可能会单击返回到步骤1,更改订单,然后再次尝试付款。在这种情况下,订单
和发票
对象将不正确,因为订单已更改
因此,为了避免这种情况,我们可以更新现有的订单
和发票
,如果它们已经存在的话,但是这现在看起来过于复杂了,也打破了发票应该是不可变的这一常见约定
对此进行建模的最佳方法是什么?简单回答-在交易确认之前,不会发生任何事情。如果信用卡未通过,请再次向他们显示账单和相关错误消息,以重试。这可能是一个简单的错误。也可能是他们真的不打算下订单 “发票”意味着欠款。事实上,这可能是一种有趣的方式来描述顾客购物时的过程顺序。但你已经到了最后一步,一旦交易完成,它就只是一个订单。因此,您不需要创建任何单独的内容 ==========编辑 嘿,我真的很感谢你在其他评论中详细说明发票要求——我不知道。我仍然会反驳这个想法,在你知道会有订单之前,必须创建一个订单 否则-为什么不在发票上做与付款相同的事情?似乎发票只有在交易完成后才是“不可变的”。因此,有一个状态字段-待定、成功、失败等。如果付款失败,在提交交易之前-非常重要-您正在检查购物车等,以重新确认所有总额 您需要使客户无法单击“上一步”并更改订单。购物车中必须有一个令牌或某种标识符,这使得这不可能
此外,我强烈建议-如果订单发生变化-如退货、换货等-您可以发布新订单。因为这一变化的一部分也反映了现有库存的变化 我考虑过这一点,但是我将失败
支付
对象,这些对象未链接到任何订单或客户。谢谢,我认为我将只在支付成功后创建订单
和发票
对象,还有一个Payment.notes
字段,我可以在其中添加一条消息,说明失败付款的原因。