|
|
1
1
如果您的事务表不是很大,我建议您从用户表中删除Balance列。如果您已经有一个事务表,为什么要平衡历史记录? 我强烈建议您从触发器中删除任何业务逻辑!仅存储过程。我建议只对真正透明的操作(审计、复杂验证等)使用触发器。 总之,我认为您应该先从用户表中删除balance列,然后编写连接用户和事务表的视图(“userbalance”)。从触发器中删除任何业务逻辑,而不是调用适当的存储过程。仅使用交易记录表显示余额历史记录。 对于不太大的表来说,这都是正确的(3-4百万的记录是可以的)。对于非常大的数据库,您需要使用分布式缓存、垂直数据库等。 |
|
|
2
1
在数据库中存储计算值总是充满潜在的错误。也就是说,这只是一种缓存技术,缓存现在已经被很好地理解了。 但是,每次访问账户页面时只计算账户页面上的运行余额是否很昂贵?我们只是在讨论加减法。可能只需要获取缓存的最终余额,并从中向后计算每个事务的运行余额就可以了,并且在维护建议的余额历史表时节省了大量工作。 我还想补充一点,如果允许插入或更新较旧的事务,那么Balance_History表将很难更新。然后,您必须为该用户更新每个连续事务,以更正运行余额。 Alexey Sviridov的建议是使用视图来平衡运行,这是一个很好的建议,尽管它们很难编写(尤其是高效运行)。Oracle的分析函数确实很适合这种类型的东西,但我不确定MySQL是否有等效的功能。 |