【问题标题】:What's a good way to store a financial ledger? [closed]存储财务分类帐的好方法是什么? [关闭]
【发布时间】:2014-02-24 23:35:56
【问题描述】:

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

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

  • 一个大表用于所有事务。要确定当前余额,请汇总所有交易。最大的缺点:交易列表增长得越长,它变得越慢。所以我怀疑这不是银行会做的事情,也不是任何真正实现这一点的人。

  • 与之前相同,但有额外的“快照”信息,例如“月末余额”表。这样,确定当前余额,只需将当前月份的交易添加到最近的快照中,速度快得多。不利的一面是,如果交易迟到,或者过去记录不正确,则必须更新快照。 (银行不应该经常发生这种情况——我希望如此——但如果你的会计期——比如你的私人生活——超过一个月的话,其他人可能会这样做)

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

【问题讨论】:

  • 我认为问题属于dba.stackexchange.com
  • 这是一个数据建模/表示问题,恕我直言,不是 dba 问题。甚至与关系数据库本身也没有直接关系......
  • 嗯,我有点希望我错了,而不是我的领域。 :)

标签: sql database database-design bank


【解决方案1】:

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

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

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

当然,还有许多其他表格可以获取其他相关信息。有趣的是,余额表通常比交易表大,因为大多数系统都会处理每日余额,而不管当天是否有交易。

【讨论】:

    【解决方案2】:

    您可能会在非常少的三张主桌上,即一张用于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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-01
      • 2012-05-04
      • 2011-06-29
      • 2020-11-02
      • 1970-01-01
      • 2012-09-02
      相关资源
      最近更新 更多