這是有點模糊,因爲文章一直在討論超類型和子類型,從來沒有真正說明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
,這似乎並不是作者的意圖。