MySql 发票和订阅模式

Nat*_*ade 5 mysql schema database-design

我建立了一个电子商务数据库,我正在添加订阅。请参阅下面的简化结构。

orders
id, customer_id

order_items
id, order_id, product_id

invoices
id, order_id

subscriptions
id, customer_id, product_id, run_date
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是该invoices表需要一个order_id但订阅只会生成一张发票。我可以将原件order_id放在订阅表中以跟踪沿袭,但随后会变得混乱,因为该invoices表将具有重复的订单 ID。我试图消除orderorder_items和保持invoices表格并添加一个invoice_items完全表绕过订单ID,但我认为它更有意义,让他们因为人们还可以购买正规产品,如T恤,而这些都是技术上的订单。是否有推荐的方法来构建表格以便正确生成发票?订单是否应该用于单次购买的产品而发票仅用于订阅?

RLF*_*RLF 1

您发现很难解释这一事实表明设计、期望或感知的要求存在问题。

是否Subscriptions自动付款,例如通过信用卡?这就是为什么 anInvoice看起来没有必要吗?或者其他什么原因。

您当前的状态是:

Customers可以通过以下两种方式之一购买您的产品:

  1. Orders要求Invoices。也许您需要向他们开具账单才能获得付款。
  2. Subscriptions没有Invoices。也许订阅是通过信用卡、PayPal 等自动支付的。

既然aCustomer决定如何与你互动,那Customer可能有几个Subscriptions,也可能有地方Orders。我认为客户可以随时取消Subscription

因此,您和您的客户都有理由保留订单和履行的完整跟踪(无论是InvoiceSubscription)。这意味着您确实可能想要Invoice某种类型的,甚至是Subscriptions.

有两种方法可以处理这个问题,即将它们视为同一事物或视为两个不同的事物。

  1. Subscriptions创建一个Invoice用于履行订阅实例。订阅Invoice可以有一个不同的方案(例如 SUB-Number-Date)来识别订阅,Invoice而不是您使用的方案InvoiceOrder 例如 INV:InvoiceNumber)。[我猜订阅Invoice会被标记为已付款。]

  2. 创建一个Subscriptions带有订阅标头的日志和一个跟踪每次履行的日志。这使您可以跟踪每次完成的详细Customers信息Subscriptions。如果提前取消订阅,可以将其用于退还客户未使用的金额。

您的组织如何看待您Customers(个人或企业)将帮助您确定最适合您业务的方法。

我该怎么办?我倾向于将Order Invoice与更复杂的分开Subscription Invoice。当需要时,可以为您的公司和客户生成订单、订阅和(退货、重新发货等)的总体摘要。