在很多的业务中,有流水日志的场景。举例来说:每取钱一次,余额就会变动一次,如果希望保留这个余额的变动,就需要在每次变化的时候考虑记录流水。
流水一般会出现的场景:(1)的确存在流水记录:例如登录流水、审核流水等 (2)重点信息的修改,保留前一个快照流水:例如账户余额的变动、用户密码的变动等
对于第一种场景的流水表设计,一般按照实际情况设计
对于第二种场景的流水表设计,最简单的方式就是原表COPY,但是多两个字段(1)主键 log_id,因为同一条记录有多次的变更,所以原来的主键无法作为主键使用(2)record_time:保留这一条流水的记录
进入流水表的当时时间
但是对于在复制环境中,第二种场景有些不一样。因为所有的
复制环境表,一般会要求 有数据最后修改时间 rep_time和一个维护rep_time的触发器。这个设计时间上就替代了record_time。 所以在这个情况下的设计,要求无需record_time,需要有一个old_rep_time,保留原来表的rep_time.
最后,说明一下流水的实现。很多开发喜欢使用触发器来处理流水,但是我们依然建议在程序中实现保留流水,而不适用触发器。触发器是对表级别来说的,无法对业务功能单独分开。一般情况下,触发器可以正常维护,但是如果这个表需要大量更新数据,但是这个更新又不想记录流水的时候,此时有触发器就非常麻烦,因为正是环境的触发器轻易是无法disable的。那么就无法实现删除大量修改数据不记录流水的场景,而且也会严重影响表的更新速度。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/617982/viewspace-2136640/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/617982/viewspace-2136640/