我已经设计了订阅产品的数据库模式。用户可以选择从某个日期开始的订阅一段时间。用户可以在几天内取消订阅,同时仍然保持订阅处于活动状态。这意味着如果用户订阅一个月,她可以在几天内取消它,例如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
由于与TRANSACTION_ID 2相关的用户取消了2天她的交易记录中不存在此表。
现在如果我有客户群说5000,那么在一年内最好的情况下,我将有5000 * 365〜1.8米的行。我相信这不是最好的办法。你能否建议我更好的模式或者可以更有效的现有模式的一些变化?以防万一您想知道我将使用MariaDB(AWS RDS)作为数据库,Python 2作为我的语言。
谢谢 Ojas
跟踪个别日期似乎真的打破了这里。你可以想要捕捉有界的范围,比如'start'和'end'日期。 – tadman
如果我只跟踪开始和结束,我将如何查询“特定日期有多少订阅者?” @tadman –
您可以使用'BETWEEN'运算符来测试。 – tadman