记帐数据库架构

本文关键字:数据库 | 更新日期: 2023-09-27 18:35:04

之前已经问过很多次了...并且没有模式的答案。

有人可以共享会计数据库架构吗?我读过很多关于复式记账和会计关系数据库的相关文章。但是没有完整的解释完整的解决方案会是什么样子。

以下是我发现对我有用的文章:

1(http://homepages.tcp.co.uk/~m-wigley/gc_wp_ded.html(货币流动原理,日记账分录(
2(http://compasspointmedia.wordpress.com/2010/04/12/sqldatabase-structure-as-related-to-accounting/(对交易记录,发票和付款的更深入解释(

这是我仍然不清楚的问题之一:

我们以赊销方式向客户销售产品。借记应收账款账户和贷记销售账户。后来我们收到了客户的付款。其数额高于应付数额。我如何处理这笔未使用的金额?

记帐数据库架构

我做了一个叫做Open Accounting的开源会计包。这是它的架构部分的样子:

CREATE TABLE account (id BINARY(16) NOT NULL, orgId BINARY(16) NOT NULL, inserted BIGINT UNSIGNED NOT NULL, updated BIGINT UNSIGNED NOT NULL, name VARCHAR(100) NOT NULL, parent BINARY(16) NOT NULL, currency VARCHAR(10) NOT NULL, `precision` INT NOT NULL, debitBalance BOOLEAN NOT NULL, PRIMARY KEY(id)) ENGINE=InnoDB;
CREATE TABLE transaction (id BINARY(16) NOT NULL, orgId BINARY(16) NOT NULL, userId BINARY(16) NOT NULL, date BIGINT UNSIGNED NOT NULL, inserted BIGINT UNSIGNED NOT NULL, updated BIGINT UNSIGNED NOT NULL, description VARCHAR(300) NOT NULL, data TEXT NOT NULL, deleted BOOLEAN NOT NULL DEFAULT false, PRIMARY KEY(id)) ENGINE=InnoDB;
CREATE TABLE split (id INT UNSIGNED NOT NULL AUTO_INCREMENT, transactionId BINARY(16) NOT NULL, accountId BINARY(16) NOT NULL, date BIGINT UNSIGNED NOT NULL, inserted BIGINT UNSIGNED NOT NULL, updated BIGINT UNSIGNED NOT NULL, amount BIGINT NOT NULL, nativeAmount BIGINT NOT NULL, deleted BOOLEAN NOT NULL DEFAULT false, PRIMARY KEY(id)) ENGINE=InnoDB;

解释一下:您有一个帐户表。这些将持有您的资产、负债、权益、收入和支出账户。您有一个表示每个会计日记帐分录的交易记录表。您有一个名为拆分的表,用于保存日记帐分录中的各个借方和贷方。

我将使用您上面的示例。

1( 赊销给客户:

借方资产:应收账款 $100
信用收入:销售额$ 100

我们在发生业务表中插入一行。我们在拆分表中插入两行引用事务 ID。第一次拆分将具有资产的帐户 ID:应收账款和金额 10000(以便士为单位(。第二次拆分将具有收入:销售额和金额为 -10000 的帐户 ID。为了使交易有效,拆分加起来必须为 0。这使基本会计等式保持平衡。(资产=负债+权益+收益-费用(。

2(客户多付:

借方资产:支票账户 $120
信贷资产:应收账款 $120

3( 您现在欠客户 20 美元的超额付款退款。(您也可以将其确认为收入,但这可能违反公认会计惯例(。

借方资产:应收账款 $20
信贷资产:支票账户 $20

如果你把它确认为收入,你会做这样的事情:

借方资产:应收账款 $20
信贷收入:超额支付20美元