2010-02-18 97 views
1

IM有些困惑由該圖http://www.b-eye-network.com/images/content/i030ht0104.gif(在文章中最後圖)ER數據模型 - 由圖

1混淆 - 在「會計ENTRY」表顯示「DebitEntry」和「CreditEntry」 ⅰ)是這兩列還是
ii)是這兩行數據?或 iii)它是兩個獨立的表,Acounting_entry_credit和Accounting_entry_debit?

與「ACCOUNT」表相同的問題,它顯示資產賬戶,livabilities賬戶,equaity賬戶?他們是3列還是3行?

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

回答

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」表密切關注,它wouldnt真正意義有一個單一的交易關係是「信貸和借記」在同一時間。因此,「DebitEntry」和「CreditEntry」實際上是兩個獨立的表,但它們引用相同的「會計事務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 
1

原則上,任何理智的設計將永遠把兩個不同的數據值,如「借項」,並在同一列「貸記」。

看起來「DEBIT ENTRY」和「CREDIT ENTRY」框是從「Accounting Entry」表中「繼承」的表格。我如何解釋這是「DEBIT ENTRY」和「CREDIT ENTRY」都是包含列ID,AMOUNT和OPERATOR的表。這些表中的行然後由「ACCOUNTING TRANSACTION」表引用。

因此,看起來每個大框定義了一個「類型」的表,並且每個嵌套框在ERD中定義了一個特定的表。我想他們是這樣畫出來的,所以他們不必一遍又一遍地重複列定義。

然後,每個「賬戶」類型(資產,責任,股權)都有一個ID和一個COMMENT字段。他們每個人都與包含賬號和說明的「賬戶類型」表有關係。

0

這是有點模糊,因爲文章一直在討論超類型和子類型,從來沒有真正說明implement inheritance in databases的可能途徑是什麼意思。

但總體而言,文章指出:

的會計事務必須由一個或多個借記項,它必須由一個或多個信用條目。

對我來說,這看起來和聽起來像指向同一表的兩個外鍵:

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 
); 

注意誰引用誰的區別。對於本文中的模型,這意味着accounting_transaction恰好引用一個debit_entry,並且恰好一個credit_entry,這似乎並不是作者的意圖。