2010-12-11 53 views
15

将事务处理条目存储到双重条目会计数据库中。数据库设计:会计事务处理表

我想出了两个解决方案选项1和选项2,我被告知大多数银行包为他们的数据库设计选择选项2。不过,我更喜欢选项1而不是选项2,因为它非常有意义,而且效率更高!

即,对于资金的两次转移,选项1需要2条记录,选项2需要4条记录。

我想知道为什么银行会选择期权2而不是期权1?这是什么原因?

Option 1) 
TRANSACTION 
Credit_AccountId 
Debit_AccountId 
Amount 
... 

Option 2) 
TRANSACTION 
AccountId 
Amount 
... 

回答

17

从插入的角度来看,选项1可能会更高效一些。但由于很多会计交易将影响两个以上的账户,所以收益可能远低于2:1。

对于这些更复杂的交易,选项2将更加清晰。也就是说,会计师通常会发现三排

  • 扣款$ 100
  • 信用B $ 60
  • 信用C $ 40

超过两行

  • 借记更清晰$ 60 Credit B $ 60
  • 借方A $ 40贷方C $ 40

如果您在双方都有多个帐户,那么也不清楚如何将借方和贷方与单个帐户相匹配。也就是说,

  • 借记US $ 100
  • 借记B $ 30
  • 信用C $ 60
  • 信用d $ 70

可以表示为

  • 借记甲$ 60学分C $ 60
  • 借方A $ 40信用d $ 40
  • 借记B $的抵免额d $ 30

但也有其他可能的方式来构造数据为数据模型2.

此外,选项2将是如果更有效的您正试图通过汇总交易来确定特定账户的当前余额。

+0

谢谢,我可以看到你的观点复杂的交易。 – 001 2010-12-11 06:02:47

+0

谢谢你的回答@Justin Cave,请你帮我解答当前的余额栏,我们使用模型2进行交易,并且还有一个帐户表和余额栏。余额字段在每个事务之后更新,对于并发问题,我们在帐户表上使用了行级锁。每一件事情都很好,直到我们需要使用两阶段提交,这是由于多平台Java和.Net,以及...我们面临着很多帐户表暂停锁定。特别是“交易等待锁定”。 DBA正在手动终止会话并删除锁定。设计不正确? – 2013-06-30 14:09:25

+0

@ M.Heydari - 这看起来更适合一个新的问题 - 评论不是真正适合扩展讨论的地方。我不会在交易系统中维护一个总值。如果您确实发现聚合是绝对必要的,请使用物化视图。 – 2013-06-30 18:09:50

5

在一般会计数据库设计中,将借方和贷方存储在单个字段(即选项2)中是合乎逻辑和高效的,因为这可以简化汇总,数字操作和报告。每个借记和贷记交易都应该有一个日期时间字段来过滤特定的时间段。从Smashwords获得这本书,标题为会计数据库设计。它提供了一些关于会计系统设计的好例子和一些有趣的财务报告sql查询。

+0

这是一个很好的方法,但它不够,因为它不是会计的默认模型。 – B4NZ41 2010-12-15 19:16:05