求助——数据库设计,网银账户
现需设计网银账户的数据库,两种方案
用户账户表
账户明细记录表
交易记录表
交易明细记录
方案1
用户账户表:存储用户的当前余额
账户明细记录表:记录账户每次余额变更的记录是收入还是支持多少金额,余额多少
交易记录:记录每一笔开始的交易
交易明细:记录每一笔交易的各个交易状态的变更
当进行一次充值,会在交易记录中插入一条记录,记录充值交易;充值成功后会在交易明细中插入充值成功的交易状态,同时更新用户账户的余额,同时在账户明细记录中插入一条记录,记录收入以及当前余额;充值成功后的操作是一个事务;
问题,整个过程中会有个更新用户账户余额的操作;有人建议说将更新操作用插入操作替代;因为更新操作会加锁;这样替换,即每次都将最新的余额插入进去而不是更新;于是就有了方案2;
用户账户表:存储用户的当前余额,余额变更时,不用更新操作,而是时间戳的形式,插入最新的余额记录;查询余额时读取最新的记录即可;这样就将更新操作转化为插入操作;
如果按照方案2的话,用户账户中的余额可以去掉,因为在方案一中的账户明细记录中,每一笔表更都会记录本次账户金额变更后的余额是多少;所以查询余额只要查询交易明细记录中的最新一条即可;
方案一中,将金额在两处存储,动态的历史变更记录在账户明细记录中有,而用户账户中有当前余额,可以对帐;方案二的话。。。只有一个地方有记录;不知是否妥帖;
因为没有这部分的设计经验,对会计原理也不熟悉;希望大家能够帮帮忙
大家认为哪种合理;
或者大家是怎样设计的
谢谢!