Это немного мутно, потому что в статье постоянно говорится о супертипах и подтипах и никогда не говорится, какой из возможных способов реализовать наследование в базах данных подразумевается.
Но в общих чертах,статья гласит:
Бухгалтерская транзакция должна состоять из одной или нескольких дебетовых записей и состоять из одной или нескольких кредитных записей.
Для меня это выглядит и звучит как два внешних ключа, которые ссылаются на одну и ту же таблицу:
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
, что, по-видимому, не соответствует намерениям автора.