用于处理个人和经常性费用的数据库设计

时间:2012-07-19 19:57:25

标签: c# sql design-patterns database-design sql-server-2008-r2

我们有一个结算系统,我们会处理个别费用以及经常性费用(订阅)。

有两个SQL表:

StandardCharges
RecurringCharges

StandardCharges表保存了客户在月内购买的各个商品。

RecurringCharges表保存按日期收费的定期项目。到时候,我们的系统会自动创建一个重复请求,该请求会向StandardCharges表添加一行,并在RecurringCharges表中按日期将费用增加到下个月。

在每个月末,我们从StandardCharges表中获取每个客户的总价值并创建发票。

是否有某种设计模式或其他方式?这是正确的数据库设计吗?理想情况下,我想在一个Charges表格中收取所有费用,并从那里管理经常性费用?

由于

2 个答案:

答案 0 :(得分:2)

我怀疑你的设计确实是正确的。

在考虑现实世界中的数据时,进行“可能”交易(IE,尚未发生但可能未实现的交易,可能是因为客户已超出其信用额度)混合在一起是没有意义的和实际交易。

将数据合并到单个表中也会使报告变得困难,因为您必须应用特殊的过滤条件并存储额外的元数据 - 例如TransactionCompleted和TransactionIsFutureCharge。

如果我要提出建议,则会将StandardCharges重命名为更接近其所拥有的数据的内容,如CompletedTransactionsRecurringTransactions类似PendingTransactions的内容。

答案 1 :(得分:0)

目前的设计对我来说似乎很合理。但是如果你想合并这两个表,你可以简单地添加一个名为IsRecurring或IsFuture或IsScheduled的BIT列,或者你想用什么来指定RecurringCharges中可能带来的费用。然后,当您的到期日期被重复计费时,您只需插入同一个表而不是另一个表。对于发票,您只需在查询中添加一个条件,以过滤掉设置了BIT列的费用。