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

C# 处理个人和经常性费用的数据库设计,c#,sql,design-patterns,database-design,sql-server-2008-r2,C#,Sql,Design Patterns,Database Design,Sql Server 2008 R2,我们有一个计费系统,可以处理个人费用以及经常性费用(订阅) 有两个SQL表: StandardCharges RecurringCharges StandardCharges表保存客户当月购买的单个项目 RecurringCharges表保存按日期计费的定期项目。到时候,我们的系统会自动创建一个重复申请,在StandardCharges表中添加一行,并在RecurringCharges表中按日期将费用增加到下个月 在每个月末,我们从StandardCharges表中获取每个客户的总价值,并创建

我们有一个计费系统,可以处理个人费用以及经常性费用(订阅)

有两个SQL表:

StandardCharges
RecurringCharges
StandardCharges表保存客户当月购买的单个项目

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

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

有没有一种设计模式或其他方法可以做到这一点?这是正确的数据库设计吗?理想情况下,我希望将所有费用保存在一个
费用
表中,并从中管理经常性费用


谢谢

目前的设计对我来说似乎很合理。但是,如果您想合并这两个表,只需添加一个名为IsRecurring或IsFuture或IsScheduled的位列,或任何您想用来指定本应包含在RecurringCharges中的费用的列。然后,当您的到期日受到重复收费的影响时,您只需插入到同一个表中,而不是另一个表中。至于发票,您只需在查询中添加一个条件,过滤掉设置了位列的费用。

我怀疑您的设计确实正确

在现实世界中考虑数据时,将“可能”交易(即尚未发生且可能无法实现的交易,可能是因为客户超出了其信用限额)与承诺交易和实际交易混为一谈是没有意义的

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


如果我提出一个建议,它将把
标准费用
重命名为更接近它所持有的数据,如
已完成交易
重复交易
待处理交易

介意提供更多您正在建模的内容吗?我建议保留第二个表名,并根据建议更改第一个表名。@ErikE,我在名称上花了很多功夫,但认为未决事务在命名(未来、定期、OneEvent等)方面比定期费用提供了更大的灵活性。在没有更多上下文的情况下,很难说是哪种方式。挂起意味着每项费用一行,不需要重复信息。这是一个模板,而不仅仅是等待的实际费用。可能是计划交易?我不同意它们可以合理地放在同一张表中。这无缘无故地使事情复杂化。