【问题标题】:Database Design for Invoices With Monthly Installments [closed]每月分期付款发票的数据库设计[关闭]
【发布时间】:2016-05-10 04:17:11
【问题描述】:

此问题是 StackOverflow 上已回答问题的扩展/扩展:Database Design for Invoices

但是,我想扩展这个想法并找出允许客户使用某种类型的分期付款(按月付款)系统支付发票的正确方法。

在已回答的问题中,投票的答案使用了具有以下表格的数据库架构:

  1. 订单表:用于草稿/挂单
  2. 订单明细表:用于挂单的行项
  3. 发票表:用于表示最终的(不可变的)订单以及客户欠款的金额。
  4. 付款表:当客户付款时,总金额会显示在此处。
  5. InvoicesPayments 表:该表显示每笔付款中应有多少金额适用于特定发票。此表是必需的,因为有时付款可能适用于多张发票。

(为了简化,因为这个问题的重点是表格设计,我省略了触发器等细节)

如何允许将发票分成每月分期付款?要求如下:

  1. 在下订单时,客户可以选择他们想要支付多少作为首付款,然后每月分期付款 X 次,直到付清余额。
  2. 现在我们可以忽略利率等因素。
  3. 有时客户会支付超过一个月的付款。例如,假设他们忘记支付一个月和下个月,他们在一次付款中支付了当月和上个月的费用。

您能提供的任何帮助/指导将不胜感激。谢谢!

-- 下午更新--

在考虑了迄今为止的响应并自己进行了一些修改之后,您对拥有如下架构有何看法:

在上述建议的架构中,所有发票都将有一个 ScheduledPayments 记录。如果发票是一次性到期的(全额支付),它将在那里有一个记录。如果发票是分期付款的,那么每次付款(加上任何预付款)都会有 X 条记录。

然后,在进行付款时,将一条记录添加到付款表中,并将一条或多条记录添加到关系表“ScheduledPaymentsPayments”中,该表将付款与发票和每月付款相关联.

您如何看待这个解决方案?您是否预见到它会出现任何问题,或者您能提出任何可能更好的替代方案吗?

【问题讨论】:

  • 根据哪张发票付款是否重要? (请说“不”)
  • @Strawberry 是的。通过跟踪付款适用于哪些发票,您可以知道哪些发票已得到满足。我想我知道你可能在说什么。在宏观层面上,只有客户总报表余额很重要。但是对于这个项目,我需要确保每张发票都满足其余额。
  • 但这有什么关系呢?客户有一个帐户。该帐户的余额就是发票总金额减去支付的总金额。
  • @Strawberry 为简单起见,我没有包括所有项目细节,但是对于这个特定的应用程序,每张发票都是由代理人出售的,代理人在支付发票时获得佣金。一个客户可以有多个由不同“代理”出售的发票。因此,我需要跟踪付款适用于哪些发票。
  • 我碰巧有两个客户以完全随机和任意的方式支付发票,金额与对我来说没有任何意义的对应。如果我必须计算出哪笔付款属于哪张发票,我真的会失去这个情节。但祝你好运!

标签: mysql sql sql-server database-design


【解决方案1】:

您可以在 Orders 表中添加 DownPaymentAmount、MonthlyPaymentAmount、NumberOfMonthlyPayments 的列,满足第一个要求。

第三个要求看起来数据库已经可以使用 InvoicesPayments 表处理它,而逻辑在应用层处理。

【讨论】:

  • 使用您在订单表中存储分期付款条款并即时计算所有内容的方法,您如何知道特定付款适用于哪个付款编号?我不需要单独的表格来跟踪该信息吗?
  • 这也可以即时计算而不是存储在表格中,但如果您希望它更容易查看,您可以创建一个“付款时间表”表格。
  • 我喜欢将付款时间表存储在表格中的想法,因为它减轻了应用程序的一些负载。如果我创建一个付款计划表,我如何将付款与付款计划记录相关联?我假设我需要在预定付款和付款之间建立另一种关系?还是我会简单地消除 Invoices/Payments 之间的关系,而是通过 Payments/PaymentSchedule 表将它们链接起来?
  • 我不得不猜测您的模型中的“发票”是什么(以及它与预定付款的不同之处或原因),但我怀疑您将通过三方面解决这个问题连接 PaymentScheduleID、InvoiceID 和 PaymentID 的桥接表,以便可以使用相同的付款来涵盖多个预定付款和/或多个发票。这将替换 InvoicePayment 桥接表。
  • 好点。我可以看到有人将每个月的付款定义为单独的“发票”。但是,我一直在查看的方式是,当有人进行购买时,系统会为总金额生成一张“发票”,但他们正在为该单张发票进行增量(每月)付款。我不确定哪种方法在实践中更常见。我可以看到每种方法的优缺点。
猜你喜欢
  • 1970-01-01
  • 2015-08-06
  • 1970-01-01
  • 2015-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-02
相关资源
最近更新 更多