【发布时间】:2018-11-20 12:25:30
【问题描述】:
我正在从基于信用的计费系统迁移到基于订阅的计费系统。到目前为止,我曾经检查过用户拥有的积分数量并以此为基础;我曾经通过电子邮件发送用户是否续订已完成。在第一次购买的情况下,我曾经激活用户选择的计划。
我现在正在转向基于订阅的计费系统,在该系统中我将使用validity 存储订阅,并且我想从根中消除信用部分。这是我的新计费系统的数据库架构。 此架构的问题是我无法处理首次购买事件,因为没有可靠的方法可以知道用户是否是第一次购买以及用户是否已支付全部金额。我对变化的每一步都感到困惑。
让我解释一下我面临的问题。在处理事务时,subscriptions 中的is_active 标志仍然是null,这意味着用户无法对我的软件执行任何操作。但是当交易被处理时,用户将返回我的网站,我的网站将标记交易paid,这意味着用户已付款,但由于交易和订阅之间没有联系,我怎么知道何时标记订阅已付费.在 TransactionController 中处理交易,在 SubscriptionController 中处理订阅。
我还没有创建订阅和事务之间的连接,因为在这种情况下,我必须在事务中允许nullable foreign keys,因为事务也可以用于额外服务!
我越想越困惑。我不知道这里有什么问题,但我知道数据库设计存在一些问题。任何帮助表示赞赏!
【问题讨论】:
-
如果你不想改变数据库,你可以使用连接。我可以看到有一个 user_id 在事务和订阅中都很常见。交易完成后,您必须检查哪个 user_id 与订阅中的相同。
-
是的,可以做到。我正在考虑将“first_purchase=>{true|false}”元信息放在 user_meta 中,并在交易完成时检查它是否存在。如果它存在,我可以激活订阅。否则,我可以续订订阅并将其标记为活动和 is_renewal。这是一个好方法吗?
-
如果订阅有多种类型(如基本、高级、黄金),那么将来可能会出现问题。如果它只有一种类型,它会工作。
-
好吧,让我们开始吧。当用户选择订阅时,将所有值放入会话中并保存在数据库中。之后继续交易并完成。如果事务完成,则获取上一个会话和事务响应合并它们并保存到另一个表中。保存值后销毁该会话。
-
是的,我只是想说同样的话,你不需要改变类型
标签: php database laravel database-design