1

我对这张图有点困惑http://www.b-eye-network.com/images/content/i030ht0104.gif(文章中的最后一张图)

1 - 在“ACCOUNTING ENTRY”表中,它显示“DebitEntry”和“CreditEntry” i)这是两列还是
ii)这是两行数据?或者 iii) 它是两个独立的表,Acounting_entry_credit 和 Accounting_entry_debit?

与“ACCOUNT”表相同的问题,它显示资产账户、宜居账户、权益账户?它们是 3 列还是 3 行?

来源:http ://www.tdan.com/view-articles/5227/

4

3 回答 3

1

原则上,任何理智的设计都不会在同一列中放置两个不同的数据值,例如“DEBIT ENTRY”和“CREDIT ENTRY”。

看起来“DEBIT ENTRY”和“CREDIT ENTRY”框是从“Accounting Entry”表“继承”的表。我如何解释这是“借方条目”和“贷方条目”都是包含列 ID、AMOUNT 和 OPERATOR 的表。这些表中的行然后由“会计事务”表引用。

所以看起来每个大框都定义了表格的“类型”,每个嵌套框都定义了 ERD 中的特定表格。我猜他们是这样画的,所以他们不必一遍又一遍地重复列定义。

然后每个“帐户”类型(资产、负债和权益)都有一个 ID 和一个 COMMENT 字段。它们每个还与包含帐号和描述的“帐户类型”表有关系。

于 2010-02-18T15:21:26.333 回答
0
create table accounting_entry (
    id integer primary key, 
    amount float not null,
    operator text,
    credit_id integer references accounting_transaction(id),
    debit_id integer references accounting_transaction(id)
);z

<--- 我一开始也以为是这样,但仔细观察“ACCOUNTING_TRANSACTION”表,将单个交易关系同时“贷记”和“借记”是没有意义的。

因此,“DebitEntry”和“CreditEntry”实际上是两个单独的表,但它们引用了相同的“Accounting Transaction ID”,这是有道理的,“会计交易必须由一个或多个借项条目组成,并且必须由一个或更多的信用条目。”

例子

>>ACCOUNTING_ENTRY_DEBIT
ID---ACCOUNTTRANSACTIONID-----ACCOUNTID---------AMOUNT-----OPERATOR
102--------2------------------------1---------------1,000-----Plus

>>ACCOUNTING_ENTRY_CREDIT
ID---ACCOUNTTRANSACTIONID-----ACCOUNTID---------AMOUNT-----OPERATOR
105--------2------------------------2---------------1,000-----Minus
于 2010-02-19T03:47:17.960 回答
0

这有点模糊,因为文章一直在谈论超类型和子类型,而从未真正说明在数据库中实现继承的可能方式是什么。

但总的来说,文章指出:

会计交易必须由一个或多个借方条目组成,并且必须由一个或多个贷方条目组成。

对我来说,这看起来和听起来像是引用同一个表的两个外键:

create table accounting_transaction (
    id integer primary key,
    date date not null,
    description text
);
create table accounting_entry (
    id integer primary key, 
    amount float not null,
    operator text,
    credit_id integer references accounting_transaction(id),
    debit_id integer references accounting_transaction(id)
);

具有适当的约束条件,以确保文本中所述的条件。但是当然有更好的设计方法。例如:

create table accounting_entry (
    id integer primary key, 
    amount float not null,
    operator text,
    entry_type integer,
    transaction_id integer references accounting_transaction(id)
);

带有显着的entry_type贷方或借方,以及适当的约束。

编辑:通常,您希望这种 ERD 表示不同类型的关系:从集合到固定数量的组件,这些组件具有相同的类型,但在集合的上下文中具有不同的含义。典型的例子是一个航段,它有一个出发机场和(希望)有一个目的地机场,当然机场就是机场。

create table flight_leg(
    id integer primary key,
    departure_airport integer references airport(id),
    destination_airport integer references airport(id)
);
create table airport(
    id integer primary key,
    iata_code varchar(3) not null,
    name text
);

注意谁引用谁的区别。对于本文中的模型,这意味着 aaccounting_transaction引用了完全一debit_entry和完全一credit_entry,这似乎不是作者的意图。

于 2010-02-18T16:57:35.403 回答