【发布时间】:2016-01-24 15:46:57
【问题描述】:
寻找一些关于定期计费系统数据库基本设计的指导。
我想出的设计有一个表来存储订阅的下一个周期(相同或新的计划,相同或不同的价格,或者不续订),另一个用于存储应用的订阅(什么产品在什么时候以什么价格买的)。这就是我所拥有的:
Subscriptions
+----+------------+--------+-----------------+------------------+-------------------+
| ID | customerID | itemID | nextBillingDate | nextBillingPrice | notRenewingReason |
+----+------------+--------+-----------------+------------------+-------------------+
| 1 | 10 | 2 | NULL | 280 | Too expensive |
| 2 | 10 | 3 | NULL | 120 | Too expensive |
| 3 | 11 | 2 | 2015-06-18 | 290 | |
| 4 | 10 | 2 | 2016-10-14 | 290 | |
+----+------------+--------+-----------------+------------------+-------------------+
SubscriptionHistory
+----+--------+------------+------------+-------+--------------+-------+
| ID | subsID | startDate | endDate | price | extInvoiceID | paid |
+----+--------+------------+------------+-------+--------------+-------+
| 1 | 1 | 2012-09-04 | 2013-09-03 | 280 | 81654 | TRUE |
| 2 | 2 | 2013-03-01 | 2013-03-31 | 0 | NULL | TRUE |
| 3 | 2 | 2013-04-01 | 2013-09-03 | 120 | 81812 | TRUE |
| 4 | 1 | 2013-09-04 | 2014-09-03 | 280 | 84221 | TRUE |
| 5 | 2 | 2013-09-04 | 2014-09-03 | 120 | 84221 | TRUE |
| 6 | 3 | 2014-06-18 | 2015-06-17 | 290 | 85312 | TRUE |
| 7 | 4 | 2015-10-14 | 2016-10-13 | 290 | 87421 | FALSE |
+----+--------+------------+------------+-------+--------------+-------+
它必须支持以下用例:
- 订阅期限为一年或三年
- 客户订阅了产品计划
- 一个客户可以订阅多个产品
- 产品的附加组件可以包含在订阅中
- 可以通过订阅部分添加插件
- 可以在订阅期间添加插件作为试用期
- 某些订阅可能会降低价格(例如,由于特殊情况同意免费第二次订阅)
- 续订计划时,附加内容和价格可能会发生变化
- 能够记录不续订的原因
-
任何客户都应该可以看到完整的历史记录,例如在上面的数据库中您可以看到客户 10:
- 2012-09-04加入
- 试用一个月后于 2013 年 4 月 1 日在订阅中添加了一个插件
- 没有因为太贵而续订,所以于 2014-09-03 过期
- 2015 年 10 月 14 日再次以更高的价格订阅,但未付款
任何指针?
【问题讨论】:
-
如果你展示你到目前为止所做的事情,你可能会得到一些帮助。这里的人不会为你做的。
-
@w0051977 我已经添加了到目前为止的内容
-
@marcus 您的解决方案的状态如何?也许您已经找到了一些开源解决方案? 4年后调查这个问题,很有趣。谢谢。
标签: database-design recurring-billing