存储金融分类账的好方法是什么?

时间:2014-02-24 23:35:56

标签: sql database database-design bank

想象一下,您需要实施一个记录您的支票账户交易的系统。通常,交易按您的对帐单按月分组。每个月都有一个期初余额和期末余额。开始日期和结束日期之间的每笔交易都会增加或减少余额。您希望能够告诉您当前的余额。

表示此数据的好方法是什么?我想出了这两个基本选择:

  • 所有交易的一个大表。要确定当前余额,请汇总所有交易。大的缺点:交易列表越长,越慢。所以我怀疑这不是银行会做的事情,也不是任何实施此事的人。

  • 与之前相同,但附加了“快照”信息,例如“月底的余额”表。这样,要确定当前余额,只需要将当前月份的事务添加到最新快照,这样会快得多。缺点是,如果交易进入较晚,或者过去记录不正确,则必须更新快照。 (对于银行而言,这种情况不应该发生 - 我希望 - 但如果您的会计期间 - 例如您的私人生活 - 可能会超过一个月,那么其他人可能会这样做)

我想知道现实系统是如何做到这一点的。

2 个答案:

答案 0 :(得分:5)

大多数银行为交易和余额执行以下操作:

Transactions (acct,date,tran_code,amount....)
Balances (acct, date, ledger_Bal,avail_bal....) 

通常每日捕获余额,通常反映当天的结束分类帐/可用余额(在一天结束时处理,使用交易总额和前一天余额来计算新余额)。每日余额大大减少了与每天需要运行的流程相关的开销(如计算透支费用)。

当然,还有许多其他表格用于其他相关信息。有趣的是,余额表通常比交易表大,因为大多数系统处理每日余额,无论当天是否有交易。

答案 1 :(得分:1)

你可能有三个主要表格,一个用于Account,一个用于Transactions,一个用于Corrections

所以你可能会将这些表格与字段一起显示如下:

Account (AcctNo, AcctName, Address, Street, State, Zip, AcctCreationDate, LastBalance)
Transactions (TransNo, AcctNo, TransDate, TransType, TransAmount, EndingBalance, AgentID) 
TransactionCorrection (TransCorrID, RefTransNo, RefAcctNo, forTransDate, AgentID)

您可以添加进行交易和更正的用户。

Agent(AgentID, AgentLastname, AgentFirstname)