我将为MySQL中的复式会计系统创建一个数据库。
我最近阅读了文章:http://homepages.tcp.co.uk/~m-wigley/gc_wp_ded.html
我在本文中发现,有三个表ACCOUNT,JOURNAL和POSTING会很方便:
ACCOUNT(accountID, accountName)
JOURNAL(journalID, journalType)
POSTING(postingID, journalID, accountID, amount)
文章描述如果账户被扣除,“金额”字段的值将为正,否则为负。
现在对于上面的POSTING表,我还有其他两个选项..
(1) POSTING(postingID, journalID, accountID, isDr, amount)
在这个选项中,'isDr'字段是一个布尔值。如果帐户被记入借方,则isDr字段将包含值“true”,否则为“false”。并且'amount'字段将始终具有正值。
(2) POSTING(postingID, journalID, accountID, debitAmount, creditAmount)
这里,如果帐户被扣款,我会将金额存储在'debitAmount'字段中,否则我会将其存储在'creditAmount'字段中。
所以,确切地说,从三个以上哪个选项更好用?
答案 0 :(得分:4)
这是主观的,但我认为选项#0(单个amount
字段为正或负的选项)最好。选项#1会在您想要进行包含学分和借记的数学时给您带来很多痛苦,因为您必须咨询isDr
字段以确定是否乘以-1
。选项#2没有很好地规范化,因为表达式debitAmount IS NULL
和creditAmount IS NOT NULL
将是等价的(如果它们有所不同,那么您的数据库处于不一致状态)。
答案 1 :(得分:2)
选项#0有一个我最近面临的缺点:
有些情况需要写入/记录的金额,并且在分类账的信用方面也被视为减号( - ),而不是在借方一侧显示其金额为正(+)。 (反之亦然)
选项#0失败(如果没有标记为借记或贷记,或者没有以其他方式解决)
你需要问问你的会计师。 (如果需要在信用方面记录任何减( - )金额(反之亦然)。
答案 2 :(得分:0)
我推荐选项#1。选项#2将导致许多未使用的字段(debitAmount和creditAmount字段总数的50%)。此外,选项#1允许您轻松获得当前余额。
最后(或者首先),选项#1遵循正确的标准化。