MySQL复式记账系统数据库设计?

MySQL复式记账系统数据库设计?,mysql,database-design,relational-database,accounting,Mysql,Database Design,Relational Database,Accounting,我将在MySQL中为复式记账系统创建一个数据库 我最近读了一篇文章: 我在这篇文章中发现,有三个表比较方便:账户、日记账和过账: ACCOUNT(accountID, accountName) JOURNAL(journalID, journalType) POSTING(postingID, journalID, accountID, amount) 文章描述了如果一个账户被借记,“金额”字段的值将为正,否则将为负 现在对于上面的发帖表,我还有另外两个选择 (1) POSTING(posti

我将在MySQL中为复式记账系统创建一个数据库

我最近读了一篇文章:

我在这篇文章中发现,有三个表比较方便:账户、日记账和过账:

ACCOUNT(accountID, accountName)
JOURNAL(journalID, journalType)
POSTING(postingID, journalID, accountID, amount)
文章描述了如果一个账户被借记,“金额”字段的值将为正,否则将为负

现在对于上面的发帖表,我还有另外两个选择

(1) POSTING(postingID, journalID, accountID, isDr, amount)
在此选项中,“isDr”字段为布尔值。如果账户借记,isDr字段将包含值“true”,否则为“false”。“金额”字段将始终具有正值

(2) POSTING(postingID, journalID, accountID, debitAmount, creditAmount)
在这里,如果账户被借记,我将在“debitAmount”字段中存储金额,否则我将在“creditAmount”字段中存储金额

那么,从以上三个选项中到底哪一个更适合使用???

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


最后(或者首先),选项1坚持适当的规范化

这是主观的,但我认为选项#0(单个
金额
字段为正或负的选项)是最好的。选项#1会给你带来很多痛苦,无论你何时想做包括贷项和借记项的数学,因为你必须查阅
isDr
字段来确定是否乘以
-1
。选项2没有很好地规范化,因为表达式
debitAmount is NULL
creditAmount is not NULL
将是等效的(如果它们之间存在差异,那么您的数据库将处于不一致的状态)。

选项0有一个我最近面临的问题:

在某些情况下,要求在分类账的贷方记录金额,并将其视为负(-),而不是在借方显示为正(+)。(反之亦然)

选项#0在这方面失败(如果未标记为借方或贷方,或未以其他方式解决)


你得问问你的会计。(如果任何负(-)金额需要重新记录并在贷方查看(反之亦然)。

感谢您的意见..以及关于选项#0??
过账(过账ID、日记ID、帐户ID、金额)的任何意见
我忽略了选项#0的含义。我也喜欢这个选项。事实上,如果不需要区分Dr和Cr金额,请使用选项#0。我想符号和帐户类型会通知大多数人Dr或Cr的状态。我参加了一些会计课程,我知道SQL数据库设计,但我无法准确解读您的question。看起来你想在两个不同的“过账”表之间做出决定。老实说,我以前没有在SQL中实现过会计表,但我会尝试帮助你。谢谢@午餐317..是的,我想在三个不同的过账表之间做出决定(其中也包括作者写的那一个)。@Jignesh,“我将在MySQL中为复式记账系统创建一个数据库"为什么?你在做的是1000个其他会计软件包没有做过的事情——其中许多你可以用自己发明成本的一小部分来购买。@dportas,谢谢你的评论。但我这样做既不是为了我的客户,也不是为了我的大学项目。软件开发是我的爱好,这个项目只适合我个人所有经验:)所以最好不要购买已经创建的会计软件包!!选择一个更有趣的项目!对单独的“借方”和“贷方”字段提出了一个很好的观点。这在T表中并不容易出错(尽管这是可能的),但在SQL中出错却非常容易。基本上……我不确定SQL的设计是否有利于GAP。