我对编码总体上有点新意,似乎正在努力思考如何有效地为我的应用程序存储数据。 (我在Laravel中尝试使用mySql)
我意识到这个问题可能倾向于针对具体意见,但我真的在寻找关于我做出的错误假设的明显指示,或者是在最佳实践方向上的推动。
我将跟踪大量邮件,就像它们是批量电子邮件管理系统中的信用一样。一个消息批处理可以使用不确定数量的信用来触发整批消息。
如果用户有这样的信用,他们将能够发送消息。我想到的一个解决方案是拥有一个表: id,user_group_id,债务/信用,reference_code - 其中user_group_id将链接到用户所属的组,借方/贷方列可以保持正数或负数(与消息相关的交易),并且reference_code将跟踪交易的类型。债务/信用交易将在user_group帐户收到新信用(购买新信用额度)的情况下出现,或者在已经发送批量消息的借方示例中出现。
所有这些背景导致我的问题..我仍然没有为user_group拥有的可用信用数量保留一个值。在能够发送新批处理之前,我应该每次运行数据库查询,每次对正负交易的所有“会计”进行求和,以确定用户是否“处于黑屏”以便能够发送更多消息批,或者我应该有一个额外的表格并单独保留其可用信用额的结果?
如果我自己存储了total-available-credits值,那么应该何时更新此单个值,在我的应用程序执行的每个与消息相关的任务结束时? *用户添加新的积分,更新总数 - 用户发送批次,更新总数等等。
答案 0 :(得分:1)
这是一个有趣的问题。你指出的意见,但仍然很有趣。数据库设计不是我的强项,但我会这样做。
首先,使用INNODB
表和 外键约束 确保完整性。我会保留每个用户组在用户组表中的剩余总余额。然后,您将创建一个事务表,其中包含事务ID,用户组ID以及用于该事务的信用,以便您可以跟踪每个用户组的事务历史记录。
只是一个想法。就像我说的,我绝不是专家。但是,拥有某种日志可能很有用,这样您可以在信用差异的情况下稍后验证交易。您以后可以随时使用它来重新计算剩余的信用额,以确保数字一致。
由于这些交易对于信用/结算可能很重要,您可能还需要关闭MySQL的自动提交并使用commit
和rollback
功能来确保您的数据在错误。
答案 1 :(得分:0)
“每次对正负交易的所有”会计“进行求和时,我是否应该运行数据库查询,以确定用户是否”处于黑屏“以便能够发送更多消息批次”
YES