我们正在实现一个软件,允许发送“虚拟”资金之间的用户内部。我们已经用一个条目启动了数据库,如下所示(简化表)。我们只记录一个事务,其中用户发起的交易(寄钱)将被记录。所以永远都是借方。
TransactionLog
------------------
TransactionLogID
UserIDFrom
UserIDTo
CurrencyID
CurrencyAmount
Remarks
TransactionDateTime然后,需求发生变化,即我们需要在数据库中使用一个复式会计模式。然后我又做了一张新桌子如下。
TransactionLogDoubleEntry
----------------------------
TransactionLogDoubleEntryID
TransactionLogID
UserID
CounterPartyUserID
CreditOrDebit
CurrencyID
CurrencyAmount
Remarks
TransactionDateTime我的问题是: 1)我是否在一个正确的方向上这样做--我把TransactionLogDoubleEntry表加上了贷方/借方--这意味着它已经成为一个复式会计模式?
( 2)我应该继续做TransactionLog吗?还是使用TransactionLogDoubleEntry就足够了?
3)如果我要保留TransactionLog表,是否有必要复制TransactionLogDoubleEntry中的currencyID, currencyAmount, remarks, TransactionDateTime?或者,这足以从TransactionLog表中获得相应的值。
发布于 2019-09-15 08:10:08
大多数复式会计制度将使用两个表来实现这一点。一个表是"header“表,它存储公共字段&第二个”行“表,它存储事务的实际细节。
如果您不知道,在复式会计中,给定事务中所有事务行的总和总是等于零。
不管怎么说,根据你目前的设计,我会做一些如下的事情:
Transaction
------------------
TransactionID
CurrencyID
Remarks
TransactionDateTime
TransactionLines
----------------
TransactionID
LineNo
UserID
DebitAmount
CreditAmount要将$5.00从UserID 100转移到UserID 250,您将有以下条目:
Transaction:
10000, 'USD', 'Test transaction', '2019/09/15 12:34:56'
TransactionLines:
10000, 1, 100, 500, 0
10000, 2, 250, 0, 500您询问了一个可能存在多个事务行的情况:-要从UserID 100转移9.00美元,将8.50美元转到UserID 123 &0.50美元给UserID 456,您将有以下条目:
Transaction:
10001, 'USD', 'Test transaction', '2019/09/15 12:34:56'
TransactionLines:
10001, 1, 100, 900, 0
10001, 2, 123, 0, 850
10001, 3, 456, 0, 50从数学/会计的角度来看,行的顺序并不重要,只要总行是0。
适当的会计系统将在每一行中都有一个G/L帐户列,这将指示交易发布到何处,以及投递期和报头级别的其他基本信息。
如果你正在开发的系统是处理真实货币的话,我会认真考虑学习一些会计基础知识。
这显然是在一个很高的水平。如果你需要进一步的帮助,请直接问。
https://dba.stackexchange.com/questions/248806
复制相似问题