数据库中的每个后续发票记录是否应引用原始订单

Should original order be referenced on every subsequent invoice record in database

考虑以下数据库设计(删除了不相关的列和表):

每次订阅的定期付款到期时,我打算添加发票记录和后续付款记录。

但是,给定的订单可以同时包含一次性 购买和订阅 购买,参考原始order_id 何时生成新的月度发票?

我的犹豫是,如果不清楚的话,原始 order 记录 可能 包括非订阅的项目,因此与经常性的项目无关发票。

我的想法:

  • 任何订单商品都可以是 0 成本。
  • 一个订阅项目是0成本订单。项目应在 table 中生成一个条目,该条目将客户和购买的服务(成本为 0)相关联,从中可以按合同规定的任何周期和金额生成发票。
  • 发票和付款之间的唯一区别在于方向。有一个 table 有足够的信息来识别(应付订单项目和订单 ID 的总和)或订阅项目(客户 ID 和服务 ID)的发票。
  • 除非您通过直接借记管理收款,否则客户不会识别付款,因此您必须对收到的资金分配(退款、拒绝等)进行编码。
  • 您真的需要发票吗(如果每个订单都可以计费的话,这不是和订单一样吗?)。

我不确定这是一个见仁见智的问题。

原始订单包含订阅订单。它包含其他信息是无关紧要的。 您关心订阅首次出现的顺序。

保留原始订单 ID 似乎是合理的。事实上,在创建发票时,最佳做法可能是获得有关发票上项目的原始订单的信息。否则,检查项目的沿袭会变得更加麻烦——这对于审计目的和其他原因可能非常重要。

  • 冗余信息(通常)是数据库设计中的禁忌。
  • 如果您需要 'extra' JOIN 来获取所需的信息,那就这样吧。这很少是用额外的列使架构混乱的原因。