繁体   English   中英

订单/发票/付款数据库建模

[英]Order/Invoice/Payment database modeling

我正在设计一个电子商务网站,其中包含以下场景:

  1. 客户可以购买物品并创建订单。
  2. 在客户支付物品总金额后,订单可能会产生未知费用。 也就是说,客户首先支付一定金额。 该订单增加了一些费用并改变了总额。 并且客户再次支付差额。 但是这两笔(或更多)付款与同一订单相关联。
  3. (可选)客户可以为多个订单提交单笔付款。

目前,我有一个Order表,每个订单可能包含多个OrderLineItem (简化模式):

Order
=====
customer
line_items
total
status

OrderLineItem
=============
price
quantity
order
product

付款与订单相关联(简化架构):

Payment
=======
order
payment_account
total
result

在当前实施中,支持单个订单方案的多次付款似乎非常困难。 我估计我必须在系统中引入不可变发票,并且付款应该与发票而不是订单相关联。 但是,我需要一些关于上述方案的订单/发票/付款建模的帮助。 我有一些具体问题:

  1. 订单和发票看起来与我非常相似(例如,两者都有项目和总计)。 典型电子商务系统的主要区别是什么?
  2. 我应该如何为我的方案建模发票? 我是否应该为InvoiceOrderInvoiceLineItem设置OrderLineItem
  3. 一些初步想法:我将有多个发票与某个订单相关联。 每当订单更改总数时,我必须以某种方式计算差额并向客户发送新的/可变的发票。 然后,客户可以付款并且付款将与发票相关联。

很想听听一些建议。 非常感激。 谢谢!

这里有很多问题,我会尝试尽可能多地解决。 许多问题是业务模型而不是数据模型。

首先,你是对的,你需要一个不可变的发票。 创建发票后,您无法对其进行更改,处理发票更改的标准方法是发出贷方通知单和新发票。

考虑表之间的关系: Order不需要保持lineItem因为这些是以另一种方式引用的,即

Order
=====
orderId
customerId
status

OrderLineItem
=============
orderLineItemId
orderId
product
price
quantity

因此,要查看订单,请在orderId上加入表。 也没有必要存储从连接计算的total

尽量不要复制您的数据:您的发票将引用orderLineItem ,但不一定是订单中的相同。 例如,客户订购A和B,但B缺货。 您运送A并创建一个引用orderLineItemId的发票。因此您的发票表可能如下所示:

invoice
=======
invoiceId
status

invoiceLineItem
===============
invoiceId
orderLineItemId
quantity

换句话说,没有必要具有该项目的细节。 您可能想知道为什么不只是将invoiceId添加到orderLineItem表中 - 原因是客户可能会订购项目A中的10个,但您只发送其中的8个,其他两个将继续发送。

付款不是针对订单,而是针对发票。 因此,您的付款表应该引用invoiceId。

然后你触及和解。 如果一切都很完美,即使是部分付款,客户也会针对特定发票进行付款。 实际上,这将是你最头痛的问题。 假设客户有多个未付的金额x,y和z的发票。 如果他们支付p,你会分配哪个? 也许按日期顺序,如果p> x,则余数是针对y分配的。 如果p = z怎么办? 也许客户打算现在支付z,但是对y表示怀疑并且误放了x? 你如何处理这些事情取决于你,但我可以说大多数发票系统都非常糟糕。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM