在交易表中存储付款和退款的正确方法是什么?

时间:2017-12-12 21:20:53

标签: sql-server database financial accounting

我遇到的问题涉及会计和数据库原则。我有一个名为Payments的表,其他列中有这个结构:

-------------------------------
id   | amount | type
-------------------------------
1    | 100.00 | payment
2    | 200.00 | payment
3    |  50.00 | refund
4    | 130.00 | refund
5    | 500.00 | payment

目前,我将付款和退款存储为正数,并在不同的列中指明交易类型。当我们提取报告时,我检查类型并在括号中加入数量[例如,(50.00)]

然而,现在的问题是,人们还可能存储相同的信息:

-------------------------------
id   | amount  | type
-------------------------------
1    |  100.00 | payment
2    |  200.00 | payment
3    | -50.00  | refund
4    | -130.00 | refund
5    |  500.00 | payment

主要论据是我们可以在此列上运行SUM()以快速获得余额,还有一个问题是“为什么在技术上存钱时存储正数量。”#39 ;

我的问题是:

在数据库中存储付款和退款的正确方法是什么?第一次实施就在那里因为我带着我的直觉 - 把它存放为负面以表明退款让我觉得不对。这背后的想法是,正如这个答案所说:

Accounting values are not scalars -- they are vectors which contain an enum (debit or credit) and a fixed-point decimal number (which can be positive or negative).

(可以找到原始堆栈溢出问题here

这个答案也声称

Using one column for everything and then using negative numbers for either debits or credits doesn't work ...

但我很难理解为什么问题中的案例是错误的。我也试图找到一个在这里不起作用的情况,并且还要查看存储负数是否错误,或者将它存储为正数也是错误的。

要重新迭代,在数据库中存储付款和退款的正确方法是什么?由于这涉及金融交易,我想确保我以正确的方式做到这一点,如果存在这样的事情。

3 个答案:

答案 0 :(得分:0)

  

在数据库中存储付款和退款的正确方法是什么?

从我的观点来看,这是积极的。 因为当您打印退款时,数字在纸上是正面的。

答案 1 :(得分:0)

简短的回答是,总有多种方法可以对系统进行建模。没有人正确的方式,所以停止搜索。我一般都同意@indiri。

您将存储的内容与该信息的呈现混淆了。更糟糕的是,你已经采取了似乎是一个无关紧要的会计mumbo jumbo offramp。您没有创建会计系统(因为非常复杂),因此担心借方,贷方,资产,负债等并不是特别有用。如果您可以准确地检索和表示信息,那么如何区分付款和退款是正确的。某些方法可能比其他方式更好,但没有任何迹象表明需要进行更改。

那"不起作用"引用过度陈述 - 但这是你的错。正如我所说,你没有创建一个会计系统。你有账户图表吗?您是否跟踪系统支持的各种交易所产生的信用和借方流量。不是; ikely。您可能创建了一个更简单的版本来处理事务。我猜你不能轻易生成共同的财务报表(例如资产负债表) - 至少在没有假设的情况下。

您可能忽略或解决的一件事是,任何交易的价值都可以增加或减少平衡。当您更正付款时,是否应该通过输入付款交易的负数来执行此操作?或者通过输入不同类型的交易?您是否应该更改原始交易或添加新行作为"偏移"?这种事情可以继续下去。

所以停止寻找圣杯。只要您能够生成准确的信息,您就可以得出结论,您的设计是正确的。

答案 2 :(得分:0)

我采用了第二种实现方式,采用了@Raidex和@indiri建议的方法。没有理由不必要地使这个记录保持复杂,特别是因为我们只是在谈论支付/退款表。