Oja*_*ale 1 mysql database-design software-design database-schema
我为订阅产品设计了一个数据库架构。用户可以选择从某个日期开始订阅一定天数。用户可以在几天内取消订阅,但之后仍保持订阅有效。这意味着如果用户订阅一个月,她可以在 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
Run Code Online (Sandbox Code Playgroud)
由于与 transaction_id 2 关联的用户在第 2 天取消了她的交易记录,因此该表中不存在。
现在,如果我有 5000 个客户群,那么在一年内最好的情况下,我将拥有 5000 * 365 ~ 180 万行。我确信这不是最好的方法。您能否向我建议更好的模式或对现有模式进行一些更有效的更改?以防万一您想知道我将使用 MariaDB (AWS RDS) 作为数据库并使用 Python 2 作为我的语言。
谢谢你,奥哈斯
小智 5
您可以在 Transaction 表中添加 end_date 字段而不是持续时间。您可以轻松地将 end_date 定义为 start_date + 您将为所选计划提供的天数。当用户取消某些天时,您可以将 end_date 减少为 end_date = end_date - 取消天数。您可以通过 end_date >= today 在任何一天检查当前有多少有效订阅。
| 归档时间: |
|
| 查看次数: |
795 次 |
| 最近记录: |