Jig*_*nek 8 mysql accounting database-design relational-database
我打算在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)
Run Code Online (Sandbox Code Playgroud)
文章描述如果账户被扣除,"金额"字段的值将为正,否则为负.
现在对于上面的POSTING表,我还有其他两个选项..
(1) POSTING(postingID, journalID, accountID, isDr, amount)
Run Code Online (Sandbox Code Playgroud)
在这个选项中,'isDr'字段是一个布尔值.如果帐户被记入借方,则isDr字段将包含值"true",否则为"false".并且'amount'字段将始终具有正值.
(2) POSTING(postingID, journalID, accountID, debitAmount, creditAmount)
Run Code Online (Sandbox Code Playgroud)
在这里,如果帐户被记入借方,我会将金额存储在'debitAmount'字段中,否则我会将其存储在'creditAmount'字段中.
那么,三个以上哪个选项更好用?
这是主观的,但我认为选项#0(单个字段amount
为正或负的选项)是最好的。每当您想要进行包含贷方和借方的数学运算时,选项 #1 都会给您带来很大的痛苦,因为您必须查阅该isDr
字段来确定是否乘以-1
。选项 #2 没有很好地规范化,因为表达式debitAmount IS NULL
和creditAmount IS NOT NULL
是等效的(如果它们不同,那么您的数据库将处于不一致的状态)。