会计和数据库设计,存储借方和贷方金额

时间:2011-02-22 14:39:35

标签: sql-server database sql-server-2008 database-design accounting

问题:在下面的情况下,我是否应将所有金额存储为正数十进制金额,然后将金额标记为“借方”或“贷方”,而不是将借方存入负金额和贷方作为正金额?


在我的数据库设计中,我将“借记”存储为负数,并将信用存储为正数。

现在报告时有时结果出错了,因为如果你这样做

TotalAmount =金额 - 费用,如果提取金额为100美元,费用为1美元。

你最终会得到 - $ 100- $ 1 = - $ 101,这是错误的结果!

6 个答案:

答案 0 :(得分:10)

正如您所发现的那样,对所有内容使用一列,然后使用负数进行借记或贷记不起作用。会计值不是标量 - 它们是包含枚举(借方或贷方)和定点十进制数(可以是正数或负数)的向量。

任何会计交易必须包含相同数量的借方和贷方。如果没有,则不是有效的交易。

同样,帐户余额也是同一种向量。在任何时刻,会计系统中所有账户的总借方和总贷方必须彼此相等,否则就会出现问题。

另一种看待这种情况的方法是将会计价值视为一个复数,其中借方是真实的,而贷方是虚构的。这意味着4个借方+3个筹码= 4 + 3i。这很明显,不能通过将虚构项折叠成负实数项来进一步简化它 - 它不是相同的数字轴。这与声称4 + 3i = 4 - 3相同。无效数学。

如果数据库本身可以存储复杂的数字,那么复数实际上是存储会计数据的好方法,可能会清除程序员通常对会计的许多困惑,并会导致各种有趣的属性。例如,平衡交易总是具有45度的相位角,就像一组平衡的账户一样。但是大多数数据库需要您在存储之前将复数分解为其实数和虚数,并将这些项存储在不同的列中 - 在会计世界中,这两列的名称分别是“借方”和“贷方”。

P.S。:我知道有些人确实使用负数来获得积分,而积极地使用借记,但这需要非常谨慎才能正确行事,而且很脆弱。每次触摸时,您都必须跟踪任何帐户的正常余额 - 例如,由于资产帐户具有借方正常余额,因此您可以使用正数来增加它。但负债账户的正常余额为负,因此该账户价值的增加为负数。你不能在任何时候将这两个值加在一起 ​​- 它们不是一回事。借记是您拥有的,而信用是您欠的。将两者放在数据库表的同一列中会闻起来很糟糕。

答案 1 :(得分:6)

由于会计全部基于日记帐分录,因此您的数据模型可能最好遵循。这意味着您的表中有两列,一列用于借记,一列用于信用。然后,您将其留给应用程序以确定应该被视为“正”值以及应该被视为“否定”的内容。 (这个问题总是出现 - 从谁的观点来看是正面的?当你在银行账户之间转账时,对一个账户来说是“负面”,而另一个账户则是“正面”。)

自从我处理这类事以来已经有一段时间了,但我似乎记得借记和贷记列可能包含正值和负值。会计师对数字的思考方式与我们的程序员不同,因此在为他们编写软件时,如果您尝试使用他们的约定,它可以简化事情。

答案 2 :(得分:6)

我与Sage Timberline会计系统合作,它将借记保存为正数和信用作为负数。在所有报告中,包括试算表,您都会扣除+积分。然后,您为借记逆转和信用逆转的正积分做负面借记。工作正常

答案 3 :(得分:3)

您可以使用sql server中的ABS功能获取绝对值。这样您就可以将负数视为正数。

例如:

select ABS(-100)

返回100,而不是-100

答案 4 :(得分:2)

这是一本名为“数据模型资源手册”的好书中的交易详细信息模式。此架构满足所有录制要求,而不使用两列。

PK TransactionID - int
PK TransactionDetailSequenceID - smallint
   Amount decimal
   CreditDebitFlag char(1)

简单有效,并且它不使用无关列,因为这里提出的其他答案。一列用于存储所有数值数据,并且仍然可以正确跟踪资产和负债帐户。

答案 5 :(得分:1)

虽然已经有一个已经接受的答案,这个问题非常重要,但我也想分享我的观点,因为它可能有助于其他人在设计数据库时特别做出决定!

总体而言,两者都有自己的缺点,通过使用abs()可以轻松终止优点和问题!但问题来自于你在不同的人可能有不同想法的团队之间进行交谈,并相信我实际上保存(-ve)值会导致更多的混淆,特别是如果他们直接从数据库中读取值!

我并不反对在大多数情况下在借记卡中保存-ve值,但保存+ ve实际上会导致较少的混淆,即使作为数据库程序员,因为我们总是有一列告知(是借记还是贷记)和谁将要编写代码可以轻松地在App Level转换它。

在数据库级别使用sum(value)只会出现异常,但实际上这是最少使用的情况,因为在会计中我们主要显示运行余额,而在应用级别我们可以使用(+)或(-ve)。 / p>

我想提出的一点是,数据库可以用于公司视角或客户视角,现在公司有数据分析师从两个角度思考,一旦我们只保存+ ve数字,它就变得更容易记住,因为我们已经有了一个标志,知道什么是什么价值!