数据库设计问题:账号余额(账号表)与业务明细(业务表)的关系如何设计?

jethao 2003-08-04 09:35:29
账号余额(账号表)与业务明细(业务表)的关系如何设计?
比如:一个银行账户,记录当前账户的余额。另外一个业务明细表,记录每笔资金业务的存取情况。我需要能够查询到任何一天的账户余额。
目前我采用的方法是:每天零时将当前账户余额结转到新日期的账户余额里,也就是说,每个账户每天一条记录。这样可以很方便的查询到任何一天的账户余额,但是缺点是每天需要结转,如果恰好零时有业务,数据可能会出错,而且每天都要有一条记录,有点大。
其他的方法有:每月结转一次账户余额,再配合每天的账户业务操作记录,就可以知道每天的账户余额了。缺点是:每月的最后一天需要做扎帐。
----------------------------------------------------------------------
大家有什么更好的方法吗?我想知道一般的银行或资金账户数据库管理中,这种关系类型的怎么设计呢?
...全文
1944 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
rollback 2003-11-04
  • 打赏
  • 举报
回复
to czb2000(czb)

1,关于想知道某个Datetime有多少余额的问题
我觉得当系统运行起来后,datetime就可以是Now,某个账户现在的余额是多少是系统用户最关心的。仔细想象一下,已经过去的某个时点的余额,真的非常重要吗。


当然重要,打印存折的时候就要某个时间的资金变动情况以及当时的余额。而且这种数据最好是在日结的时候就计算好写入数据库,随时都可以查询,不然会很麻烦的。

其实做这样的系统,技术是第二位的,业务知识才是第一位。


jethao 2003-08-07
  • 打赏
  • 举报
回复
谢谢楼上的,和我想得差不多!
czb2000 2003-08-06
  • 打赏
  • 举报
回复
1,关于想知道某个Datetime有多少余额的问题
我觉得当系统运行起来后,datetime就可以是Now,某个账户现在的余额是多少是系统用户最关心的。仔细想象一下,已经过去的某个时点的余额,真的非常重要吗。
2,我的处理方式
1,业务数据表
记录每笔业务数据
2,月结数据表
每月结算一次,月末余额自动为下个月的本月期初
3,实时数据表
系统中账户现在的余额
4,报表
直接取本月期初,目前余额,
列出某时间段的所有业务数据







jethao 2003-08-06
  • 打赏
  • 举报
回复
谢谢楼上的三位!
================================================================================
前面有人说用反推的方法,考虑了一下,虽然数据量不大,但是如果用反推的方法的话,可能系统开销太大,比如至少我可能要经常查询一年内的各个账户每个月初的余额,反推的话,响应时间太长,客户肯定等待不起。
================================================================================
楼上三位都推荐采用日结的方式,的确比我考虑的周全啊!我的方法是土了一点,每个账户每天提前日结。phpdocf(老李) 的方法是选择性的日结,只对有存取操作的账户日结。rollback(我好烦)的是每个账户在每日操作完成后,根据当日明细日结。
================================================================================
我想知道月结和日结相比,查询统计时会不会有什么问题呢?
我打算每月末根据当月的业务明细做一个扎帐,新的账户余额就作为下月的起初余额,查询时根据每月的期初余额和业务明细,顺推得到该月某日的账户余额。
这个方法算是年结和日结方案的折衷吧!对于数据量不大的系统,应该比较合适,如果数据量的很大的话,那就肯定必须日结了。不知这样设计有没有问题呢?还有没有更高效的方法呢?
happydreamer 2003-08-05
  • 打赏
  • 举报
回复
我做过的一个系统 和你的差不多
库存表只保存实时的库存数量,不保存每天的库存
库存表上用触发器把记录库存数每次的变化最终结果,修改时间,操作员写入日志表
用反推的方法计算某天的库存
jethao 2003-08-05
  • 打赏
  • 举报
回复
顶起来!
rollback 2003-08-05
  • 打赏
  • 举报
回复
做三个表:
1、银行账户表,记录当前账户的余额。
2、当日业务明细表,记录每笔资金业务的存取情况。
3、历史业务明细表:记录每笔资金业务的存取历史情况。
在银行账户表中有 资金余额、昨日资金余额,变动日期,账号状态。。。。。。
每天做轧帐或日始的时候,把当日业务明细表的数据导入历史表,并且经统计后更新银行帐户表,然后truncate当日明细表。
银行账户表在当日只insert新用户记录,不要update,不要delete
查历史余额的情况是不是很多啊,如果非常多,那就在日始的时候把银行帐户表备份一下咯,每日添加。再说,银行帐户表很重要,本来就应该备份,不然数据万一乱了,你哭都来不及
这样做对于数据量大的系统来说速度比较快。还有,触发器不要用太多。
phpdocf 2003-08-05
  • 打赏
  • 举报
回复
你这个问题其实是一个日结功能怎么实现的问题(库存管理系统中也存在这个问题):
当前我采用的方法和你前面建日结表的方法一臻,但具本操作不一样,我的处理方法是:
系统中建一个日结表,但不是每天都要对每个帐户进行日结操作,而是在该帐号有业务操作的同时在日结表中对该帐号进行日结操作;如果当天该帐号还进行第二次、第三次业务操作则改写日结表中该帐号的日结数据,这样作不但能保证日结操作的实时性,而且也可以大理的结约存贮空间,缺点是日结统计的时候要稍微麻烦一点,可能需求向前追踪才能得到某个帐号在某个具体日期的资金情况
jethao 2003-08-04
  • 打赏
  • 举报
回复
不论是每天扎帐,每月扎帐,还是每年扎帐,都需要一个期初余额啊!我就是想知道有没有办法做到最简洁高效。
CrazyFor 2003-08-04
  • 打赏
  • 举报
回复
账号余额(账号表)统计当前的余额

与业务明细(业务表)所有的明细


反推的方法计算某天的余额
yijiayi 2003-08-04
  • 打赏
  • 举报
回复
关注一下.UP
caiyunxia 2003-08-04
  • 打赏
  • 举报
回复
银行每天本来需要扎帐
每天晚上固定时间不能开展业务
jethao 2003-08-04
  • 打赏
  • 举报
回复
有高手在吗?

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧