我会用这个型号的
你的客户
Client
------
Client ID
Name
...
你的计划(你可以在需要的时候定义新的计划).
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
考虑到此模型,我将在每个计划中 for each 客户端使用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日取消订阅时,只用月和年更新订阅表中的列End(因为您已经预先设置了日期和时间).
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
请确保一个客户端不能同时有两个订阅.
这允许您自动处理每月订阅in your app,而不是使用您的银行/PayPal帐户.
但有些银行为您提供两项服务:
-唯一借方
-定期借记
第二个允许您处理每月的订阅.