2014-02-24 25 views
0

想象一下,您需要实施一个记录您的支票帐户交易的系统。一般来说,交易按您的账单上的月份分组。每个月都有一个期初余额和一个期末余额。开始日期和结束日期之间的每笔交易都会增加或减少余额。你想能够告诉你目前的平衡。什么是存储财务分类帐的好方法?

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

  • 所有交易的一张大表。要确定当前余额,请总结所有交易。大的缺点:交易列表越长,它越慢。所以我怀疑这不是银行会做什么,或者任何实施这个计划的人。

  • 与以前相同,但是具有额外的“快照”信息,例如, “月底余额”表。这样,为了确定当前余额,只有当前月份的交易需要被添加到最近的快照中,这要快得多。缺点是,如果交易迟到或者过去记录不正确,则快照必须更新。 (这不应该发生的银行过于频繁 - 我希望 - ,但如果您的会计期间可能会为其他人 - 像你的私人生活 - 长于一个月)

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

+0

我认为这个问题属于http://dba.stackexchange.com/ –

+0

这是一个数据建模/表示问题,而不是一个dba问题恕我直言。甚至不直接关系到关系数据库本身... –

+0

嗯,我有点希望我错了,不是我的领域。 :) –

回答

2

大多数银行做交易及余额如下:

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

余额一般日常拍摄,并且通常反映的一天(在一天结束时处理结束总帐/可用余额,使用事务的总和和前一天余额计算新的余额)。每日余额大大减少了需要每天运行的流程相关的开销(如计算透支费用)。

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

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) 
相关问题