我们正处于为我们的客户提供订阅的网络应用程序的规划阶段。订阅期有所不同,可以由我们的客户无限期延长,但始终至少一个月(30天)。
当客户注册时,客户信息(账单地址,电话号码等)存储在customers
表中,并在subscriptions
表中创建订阅:
id | start_date | end_date | customer_id
--------------------------------------------------------
1 | 2010-12-31 | 2011-01-31 | 1
每个月我们都会循环遍历subscriptions
表(最好是cronjob),并为过去的订阅期创建发票,这些发票存放在他们自己的表格中invoices
。根据客户的不同,发票可以手动打印出来并通过邮件发送,或者只是通过电子邮件发送给客户。
由于我们的客户和产品的性质,我们需要提供各种不同的付款方式,包括电汇和信用卡付款,因此某些发票可能需要手工处理并注册为我们的员工支付。
每个月的第15天,invoices
表都会循环播放,如果没有为实际发票标记付款,则相应的订阅将被删除。如果已注册付款,则end_date
表中的subscriptions
会再增加30天(或现在我们客户选择的时间段)。
我们是否通过增加日期前进和后退来处理非付费客户和扩展订阅?随着客户扩展订阅,添加新订阅会更好吗?
答案 0 :(得分:5)
我认为只要您只有一个订阅类型,就不需要为单个客户创建多个订阅记录。如果结算周期始终是固定价格的月度,则更改订阅end_date就足够了。您需要知道的是,当他的订阅用完时,您可以停止开具发票。因此,如果他扩展了他的订阅,您只需更新一个记录,以便下个月恢复结算。
另外,我认为标记未付费订阅而不是删除订阅会更好。如果客户错过了每月付款,请将订阅标记为未付款,以便停止将来的发票(和服务)。当/如果他们付款,您取消订阅,以便恢复服务/下个月的发票。
答案 1 :(得分:5)
我所处理的其中一个应用程序遇到了这个问题,我们通过跟踪用户的订阅来解决问题,但不跟踪到期日期。然后,我们跟踪他们应该在他们的帐户上收费的日期 - 所以,如果我们想看看有人在哪个订阅,我们可以只检索他们帐户的最新订阅记录,如果我们想看到下次他们被收费时,我们只需检查他们的next_bill_date
。
通过这种方式,您可以跟踪用户的订阅并查看他们何时升级/降级,但您的结算代码保持简单 - 您永远不必担心重叠(因为订阅没有结束日期到处理)。
答案 2 :(得分:3)
我会使用订阅表来跟踪订阅。 这意味着,当客户扩展其订阅时,会插入新记录。
此外,我会在customer表中添加一个subscription_end日期列,以便在插入新订阅时通过触发器进行更新。
虽然这是非规范化,但这种方法将允许您的Web应用程序在没有任何连接的情况下检查客户对服务的访问权限(减少数据库服务器负载)。 实际上,只有批处理才能查询订阅表。
此外,保留订阅历史记录可能很有用
当您的用户群和订阅历史记录变得庞大时,您可以决定通过以方便的格式导出来定期备份(我将始终使用xml,但我使用首选csv的某些企业)。
答案 3 :(得分:2)
为了跟踪单个客户的订阅历史记录,我会说最好添加新的订阅。
你也可以省去头痛的问题,为什么1月30日订购的订阅会在3月到期(你知道,2月是最短的月份......)。