需要更好的数据库设计方法

时间:2017-02-23 02:53:58

标签: mysql database-design database-schema software-design

我为订阅产品设计了一个数据库架构。用户可以从特定天数的日期开始选择订阅。用户可以在几天内取消订阅,同时仍然保持订阅活动。意思是如果用户订阅了一个月她可以在10,15和20天取消它,因此仅支付27天(30减去3)。
到目前为止,我已经提出了这个架构。 enter image description here

  • 每个用户都有一个个人资料。
  • 用户可以选择计划。
  • 一旦用户选择了一个计划,就会将其记录为交易,该交易还存储有关该计划的开始日期和持续时间的信息。
  • 每笔交易都有付款(稍后关注该部分)

现在,由于用户可以随时取消订阅,我应该如何跟踪他们订阅的不同用户和日期?

我想到的解决方案是创建一个新表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

2 个答案:

答案 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