计费数据库 - 存储交易
你让一个游戏网站,用户可以在购买游戏积分和资金存入/贷记到用户的虚拟账户玩一些游戏等等等等。计费数据库 - 存储交易
如果你有一个会计记录交易,它会被记录是这样的(也许有点复杂一些,但你明白了吧)
TRANSACTION
PK_ID1 Cash - $10 (System)
PK_ID2 Deposit $10 (System)
TRANSACTION
PK_ID3 Bank Account - $10 (John)
PK_ID4 Deposit $10 (John)
作为开发人员,你真的需要浪费2个额外的记录吗?为什么不只是记录它像这样......(那么你可以存储相同的存款记录下其他列,其中资金是从哪里来的信息,状态)
TRANSACTION
PK_ID1 Cash - $10 (system)
PK_ID2 Deposit $10 (John)
有没有的选项#1任何真正的优势在选项#2和副签证?
编辑:改性问题,除去CR,DR,并用符号代替。
(回答你的问题,但也应对在paxdiablo的回答提出的一些要点。)
这是无关的会计师找你的数据库中。使用双输入,错误很容易追踪;这是一个会计和国税局的要求,所以真的,你没有选择,你需要任何系统处理公共资金的双重入场。
(请不要试图告诉我什么是“双项”是,我已经写了双输入系统为银行,审计要求)复式是一种核算方法的基础上,一组帐户。每笔金融交易都是日记账分录;如果所有交易从一开始就被重新应用,所有账户的余额将与现在的余额完全相同。
-
双项意味着每笔交易都有一个“要”和“从”账户;金钱永远不会离开系统或进入系统。每个信用都附有一个借记卡。(1)不是(2)的“复式”版本,它们不易被比较。约翰的交易的双项版本(一个金融交易),在逻辑会计术语:
来源:
JohnAccount
为:SystemAccount
金额:10.00
(美元)这很可能是两行一个表,一个贷方,另一个借方,这两个插入包装在一个SQL Transaction中。
这就是会计系统,这是内部的,并处理金钱。我们完了。
-
但您还将会计系统与购买/销售系统结合在一起(未明确声明)。当然,对于你从约翰那里拿下的十块钱,你需要给他买任何他买来的东西,并记录下来。约翰买了十块钱值得游戏学分,如果你追踪,那么,您还需要:
- 来源:
SystemGamingAccount
为:JohnGamingAccount
金额:100
(学分)
或以美元表示: 来源:
SystemGamingAccount
为:JohnGamingAccount
金额:10.00
(美元)那个,也可能是在一个表中的两行,一个是信贷和其他借记,四个插入包裹在一个SQL事务。
- 来源:
-
需要明确的是,如果你是卖小部件,而不是游戏积分,第二(小窗口跟踪)交易将是:
来源:
Warehouse
要:PublicSale
金额:1
(小部件)由于您正在仓库中跟踪单位,但没有John Q Public在他的口袋里有多少小工具,这是两个插入加上一个更新(
UPDATE Part SET QtInStock = QtyInStock - 1 WHERE PartCode = "Widget"
),所有包装在一个SQL事务中。
并没有为每个用户帐户,对吧。虚拟的,深奥的或实体的,它是一个法律实体,进行交易。所以我们不要假装它不存在,因为它是虚拟的。对于游戏,一美元账户加一个游戏(信用)账户。
信用卡/借记
我会把CR/DB回来;不是CHAR(2),而是布尔值。它会帮助你后,当表很大,
WHERE IsCredit = 1
速度远高于
WHERE Amount >= 0.
注意,与“> =”你必须确保每个代码段进行编码以同样的方式,有时不是“>”。布尔或char没有这个问题。
@LittleTreeX littlegreen?你对这个问题感到困惑吗?或许可以问一个问题,清除你的困惑,而不是要求别人提出意见。 – PerformanceDBA 2010-12-21 18:49:26
记住SO不是论坛,这个问题不是一个线程。当我读到你的答案时,它非常假设我已经阅读@ paxdiablo的答案,如果/当你的答案是upvoted时,情况就不会如此,所以它被列在最上面。你应该尝试编辑你的答案,以便更好地独立(或者明确地说,这部分是对@ paxdiablo答案的回应,否则它最终会让读者感到困惑。) – jalf 2010-12-21 19:46:37
@jalf。谢谢。编辑我的答案。 – PerformanceDBA 2010-12-21 20:01:52
就数据而言(这就是你要问的),没有。您应该将其存储为有符号值。复式记账法是不是暴民这样做,它可以隐藏国税局真正的利润:-)
这意味着交易已经得到平衡(值永远不会创建或销毁,只是转化)。如果您只将它们存储在一个带有符号的列中,那么平衡交易(和账簿)会容易得多。
在视觉呈现方面,一些会计师可能喜欢他们在单独的列,但绝大多数会产生与“阴性”只是表示不同的报告(如用括号包围它们)。
这可能是(像许多其他会计事),双列从很久以前发扬光大。将两列相加然后从正数中减去负数总和以得到当前位置(相对于以混合方式进行加减)会更容易。但这是我的假设。
也here见。
可能重复的[会计数据库 - 存储信用卡和借记卡?](http://*.com/questions/4074425/accounting-database-storing-credit-and-debit) - 必须是会计星期SO: - ) – paxdiablo 2010-11-02 03:43:12
@paxdiablo:重复的问题,是的。同一用户?是的。 90分钟后问了这个问题。 – NotMe 2010-12-21 19:39:03