数据库设计 – 双入簿记数据库设计
我正在创建会计软件.我需要强制执行复式记账.我有每行事务一行而不是两行的经典问题.
让我们举一个例子,看看它将如何在两种情况下实现. 考虑账户现金和账户租金.当我支付每月租金时,我将100美元从我的现金账户转到我的租金账户. 每个交易一行 在单行系统中,此类事务将存储为: 交易 tx_id | posting_date 1 | 23/05/2015 transaction_records id | tx_id | credit_account | debit_account | amount 1 | 1 | Cash | Rent | 100.00 每个事务两行 在两行系统中,我必须镜像相同的交易记录以创建相反的记录,一旦我总结两者,我就会得到零余额. 交易 tx_id | posting_date 1 | 23/05/2015 transaction_records id | tx_id | type | account | amount 1 | 1 | credit | Cash | 100.00 2 | 1 | debit | Rent | 100.00 问题 首先,我要注意:我有交易和transaction_records表(而不是一个表)的原因是能够处理拆分交易(我从现金账户转移100美元到两个或更多不同账户的情况) . 起初我尝试使用每个事务一行来实现它,但是计算帐户余额并实际检索数据很痛苦. 我倾向于第二种情况;但是,它也有一些问题: >如何更新单个记录?假设我犯了一个错误,而不是记录100美元的租金,我记录了10美元.我现在有2个transaction_records – 一个用于信用卡,一个用于借记卡,两个金额均为10美元. 哪种方法更好/更简单? 为了简化我的问题:我想表示从帐户A到帐户B的资金流动.我给出的两个方案都是存储此类交易的有效设计.我也指出他们都有缺点和优点.专业人士(第一个:更容易保存,更难以检索;第二个相反). 他们可能有其他我现在没有发现的优点/缺点,因此我向更有经验的人提出意见. 解决方法实际上,所提出的单行会计模式允许进行适当的双重记录计费(以总是指定借记和贷记的帐户)而不引入“金额”数据的冗余.一行模式为您提供了一个双重条目的实现,它通过构造进行平衡,因此不可能“松散平衡”.机器可以在运行中重新计算分类帐. 您必须执行2次选择而不是一次来检索分类帐. 注意,除了事务拆分之外,还有其他交易,例如外汇可能最终会有2条记录而不是4条.这取决于你是否会对一些进行非规范化,只需输入具有类似描述的4条交易. 您可以阻止输入或修改任何事务以维护审计跟踪,如果您希望能够审计事务日志,则这是必需的. 看来,在上面的主题中,对于CPA,“完全标准化”似乎意味着所有会计师都认可的规则,而对于程序员而言,它具有不同的含义,即没有存储的派生或冗余数据. 所有会计数据都是一组交易,它们提供金额以及它们流动的帐户以及它们的日期,一些描述(以及其他附件).分类帐和余额是通过执行总和从此事务数据派生的简单视图. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |