在数据库中设计月订阅系统的良好做法

前端之家收集整理的这篇文章主要介绍了在数据库中设计月订阅系统的良好做法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想知道如何在数据库中设计每月订阅软件系统.
这些系统在互联网上广泛使用,尽管我找不到关于数据库设计的很多东西.

在我的情况下,这些元素(也许还有一些我忘了)必须包括在内:

>客户端
>计划(如“基本”/“保费”).每个计划都有一个月的价格和一个学分(例如:基本计划每个月提供30个学分,保费计划无限制学分).
>积分是在应用程序中花费的虚拟资金.
>订阅/取消订阅
>付款(注意实际支付的价格可能与计划的基准价格有所不同,因为折扣等)
> …?

除了数据库设计之外,还可能有触发器需要设置这样做(?).

我的痛点:

>我看不到一般的方式,这是全球的设计
>哪个应该在DB中的一行:month_susbscrition(即每个客户端每月1行)或订阅本身(即每个客户端1行)?
>您如何处理每月订阅自动续订?
>如果您预计使用像PayPal这样的服务来处理自动每月付款,您将如何处理付款设计?

注意

我自愿没有详细地披露我的需要,因为这样,辩论可以保持通用,对其他人更有用.

感谢帮助.

解决方法

我会用这个模型

你的客户

Client
------
Client ID
Name
...

您的计划(您可以在需要时定义新计划).
如果客户一次性购买12个月(但只是一个想法),如果您想提出折扣,我添加一个Price_per_year.

Plan
------
Plan ID
Name
Credits_per_month
Price_per_month
(Price_per_year)

您的订阅

Subscriptions
------
Subscription ID
Client ID
Plan ID
Subscription_start_timestamp
Subscription_end_timestamp

考虑到这个模型,我将每个客户端每个计划使用1行.

当客户订阅“Premium with 1st month free!”时,您的数据库将如下所示:

Client
------
ID: 1; LastName: Foo; ...

Plan
------
ID: 1; Name: Premium; Credits: -1 (unlimited); Price_per_month: 30
ID: 2; Name: Premium 1st month offer; Credits: -1; Price_per_month: 0

Subscription
------
ID: 1,Client ID: 1,Plan ID: 2,Start: 2014-05-07 08:00,End: 2014-06-06 07:59
ID: 1,Plan ID: 1,Start: 2014-06-07 08:00,End: 9999-12-06 07:59

当客户取消订阅7月1日时,请更新您的订阅表中的列,仅包含月份和年份(因为您已预先设定了日期和时间).

Subscription
------
ID: 1,End: 2014-07-06 07:59

要知道客户端是否不取消订阅,您可以使用:

Select Count(client.*) From Client client
Inner Join Subscription sub On sub.client_id = client.id
Where DATE_TODAY Between sub.start And sub.end

确保您不能同时为客户端订阅2个订阅.

这允许您自动处理您的应用程序中的每月订阅,但不能与您的银行/ paypal帐户一起处理.

但有些银行为您提供两项服务:
– 独一无二的借记
– 定期借记

第二个将允许您处理每月订阅.

猜你在找的MsSQL相关文章