我为订阅产品设计了一个数据库架构。用户可以从特定天数的日期开始选择订阅。用户可以在几天内取消订阅,同时仍然保持订阅活动。意思是如果用户订阅了一个月她可以在10,15和20天取消它,因此仅支付27天(30减去3)。
到目前为止,我已经提出了这个架构。
现在,由于用户可以随时取消订阅,我应该如何跟踪他们订阅的不同用户和日期?
我想到的解决方案是创建一个新表Plan_Transaction_user,它将跟踪该日期的每个日期和事务ID。这种方式如果用户在特定日期取消订阅,则该交易ID将不会记录该日期。
表格如下所示:
Date Transaction ID
1-1-2017 1
1-1-2017 2
1-1-2017 3
1-2-2017 1
1-2-2017 3
由于在第2天取消了与transaction_id 2关联的用户,因此该表中不存在其交易记录。
现在,如果我有5000的客户群,那么在一年内的最佳情况下,我将拥有5000 * 365~1.8m的行。我相信这不是最佳方法。能否请您建议我更好的架构或现有架构的哪些更改可以更有效?万一你想知道我将使用MariaDB(AWS RDS)作为数据库而Python 2作为我的语言。
谢谢你, Ojas
答案 0 :(得分:4)
您可以在Transaction表中添加end_date字段而不是duration。您可以轻松地将end_date定义为start_date +您为所选计划提供的天数。当用户取消某些天时,您可以将end_date减少为end_date = end_date - 取消天数。您可以查看当前通过end_date> =今天查看的有效订阅数量。
答案 1 :(得分:0)
与您的Plan_Transaction_user设计类似,如果您只需知道任何特定日期的订阅者数量,而不知道他们是谁,您可以按天聚合该表。像
Date user_count
1-1-2017 1
1-2-2017 2