我会用这个模型
您的客户
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行。
当客户订阅诸如“第一个月免费的高级服务!”之类的报价时,您的数据库将如下所示:
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, Client ID: 1, Plan ID: 1, Start: 2014-06-07 08:00, End: 9999-12-06 07:59
当客户取消订阅7月1日时,请仅使用月份和年份更新“订阅”表中的列末尾(因为您已经设置了日期和时间)。
Subscription
------
ID: 1, Client ID: 1, Plan ID: 2, Start: 2014-05-07 08:00, End: 2014-06-06 07:59
ID: 1, Client ID: 1, Plan ID: 1, Start: 2014-06-07 08:00, 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个客户端订阅。
这使您可以自动处理每月订阅 应用程序中,但不能使用银行/贝宝帐户。
但是有些银行为您提供两种服务:-唯一借记-定期借记
第二个将允许您处理每月订阅。