MySQL双入口会计系统数据库设计?

时间:2011-11-19 06:10:11

标签: mysql database-design relational-database accounting

我将为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'字段中。

所以,确切地说,从三个以上哪个选项更好用?

3 个答案:

答案 0 :(得分:4)

这是主观的,但我认为选项#0(单个amount字段为正或负的选项)最好。选项#1会在您想要进行包含学分和借记的数学时给您带来很多痛苦,因为您必须咨询isDr字段以确定是否乘以-1。选项#2没有很好地规范化,因为表达式debitAmount IS NULLcreditAmount IS NOT NULL将是等价的(如果它们有所不同,那么您的数据库处于不一致状态)。

答案 1 :(得分:2)

选项#0有一个我最近面临的缺点:

有些情况需要写入/记录的金额,并且在分类账的信用方面也被视为减号( - ),而不是在借方一侧显示其金额为正(+)。 (反之亦然)

选项#0失败(如果没有标记为借记或贷记,或者没有以其他方式解决)

你需要问问你的会计师。 (如果需要在信用方面记录任何减( - )金额(反之亦然)。

答案 2 :(得分:0)

我推荐选项#1。选项#2将导致许多未使用的字段(debitAmount和creditAmount字段总数的50%)。此外,选项#1允许您轻松获得当前余额。

最后(或者首先),选项#1遵循正确的标准化。