重复计费数据库设计

时间:2012-06-15 02:06:55

标签: sql database-design atk4

我正在撰写一份申请,其中涉及每月(或每周)固定金额的定期结算,并且可以持续到订阅取消。 客户可以提前支付几个期间。 他可以取消订阅,然后在某些无薪期后回来。 我需要系统让我知道何时过期。

因此,我正在研究如何设计数据库(可能不是数据库问题,而是编程问题),

有没有人来过这种应用?采取了什么方法?

2 个答案:

答案 0 :(得分:4)

我认为你可能会试图过于聪明地设计并过度思考它。如果您考虑业务问题,每个付款时间间隔实际上都是发票。为什么不创建发票表并让预定作业根据每个帐户的周期以及在该时间间隔内是否处于活动状态,以特定间隔插入发票。

通过拥有实际的发票行,您可以获得一个InvoiceID,您可以在向客户寻求付款时参考,并为每个结算单独跟踪付款状态。

有时简单是最好的。

答案 1 :(得分:2)

我认为你过度复杂了。

创建表用户:

pk id_user
nm_user
fl_status (active, canceled, pendent, etc)

为一个用户创建一个表订阅到多个订阅:

pk id_subscription
fk id_user
fl_type (maybe there are different subscriptions, with different prices)
dt_in
dt_out

为多笔付款创建一个表付款订阅:

pk id_payment
fk id_subscription
fl_type (card, payment order, something else)
fl_status (generated, sent, confirmed, canceled because of subscription canceled, canceled because of something else, etc)
dt_generated
dt_sent
dt_confirmed
dt_canceled
[I think you will need another fields to follow and confirm the payment, but it depends of your payment model)

现在你需要建立一些在特定时间每天运行的机器人。

如果您获得所有活跃客户以及每个活动客户的最后一笔付款,您将知道如果最后确认的付款与实际日期相比超过x天,则是否需要生成新付款(具体取决于是否为预付,后付等)。如果是,则生成新的付款订单。

机器人会发送一封电子邮件或其他订单(然后标记为)。

另一位机器人将使用您的付款方式确认付款。

当然,您需要很好地定义您的模型,因为每个用户状态都需要一个机器人来保持运行,直到它被取消或由于缺乏付款而被发送给法官。这是一项很多工作,但没有什么大不了的。

ps:如果它是一个更复杂的系统,数据库将持续存在,你将获得所需的所有信息,你有一个每个订单的日志,你知道每个订单发生了什么,因为它们有日期和状态。您可以估计,您将拥有多少到期日,一天后,两天后将支付多少,等等。