我们有一个结算系统,我们会处理个别费用以及经常性费用(订阅)。
有两个SQL表:
StandardCharges
RecurringCharges
StandardCharges表保存了客户在月内购买的各个商品。
RecurringCharges表保存按日期收费的定期项目。到时候,我们的系统会自动创建一个重复请求,该请求会向StandardCharges表添加一行,并在RecurringCharges表中按日期将费用增加到下个月。
在每个月末,我们从StandardCharges表中获取每个客户的总价值并创建发票。
是否有某种设计模式或其他方式?这是正确的数据库设计吗?理想情况下,我想在一个Charges
表格中收取所有费用,并从那里管理经常性费用?
由于
答案 0 :(得分:2)
我怀疑你的设计确实是正确的。
在考虑现实世界中的数据时,进行“可能”交易(IE,尚未发生但可能未实现的交易,可能是因为客户已超出其信用额度)混合在一起是没有意义的和实际交易。
将数据合并到单个表中也会使报告变得困难,因为您必须应用特殊的过滤条件并存储额外的元数据 - 例如TransactionCompleted和TransactionIsFutureCharge。
如果我要提出建议,则会将StandardCharges
重命名为更接近其所拥有的数据的内容,如CompletedTransactions
和RecurringTransactions
类似PendingTransactions
的内容。
答案 1 :(得分:0)
目前的设计对我来说似乎很合理。但是如果你想合并这两个表,你可以简单地添加一个名为IsRecurring或IsFuture或IsScheduled的BIT列,或者你想用什么来指定RecurringCharges中可能带来的费用。然后,当您的到期日期被重复计费时,您只需插入同一个表而不是另一个表。对于发票,您只需在查询中添加一个条件,以过滤掉设置了BIT列的费用。