C'est un peu trouble parce que l'article ne cesse de parler de supertypes et de sous-types et n'indique jamais vraiment lequel des moyens possibles pour implement inheritance in databases est voulu.
Mais en termes généraux, l'article stipule:
Une opération comptable doit être composé d'une ou plusieurs entrées de débit et il doit être composé d'une ou plusieurs entrées de crédit.
Pour moi, cela ressemble et ressemble à deux clés étrangères qui font référence à la même table:
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)
);
avec des contraintes appropriées garantissant la condition énoncée dans le texte. Mais bien sûr, il y a de meilleures façons de concevoir cela. Par exemple:
create table accounting_entry (
id integer primary key,
amount float not null,
operator text,
entry_type integer,
transaction_id integer references accounting_transaction(id)
);
avec entry_type
signifiant crédit ou de débit, et des contraintes encore appropriées. Edit: Normalement, une ERD de ce type devrait normalement indiquer un type de relation différent: celui d'une collection à un nombre fixe de composants qui sont du même type mais ont des significations différentes dans le contexte de la collection. L'exemple classique est une étape de vol qui a exactement un aéroport de départ et (espérons-le) exactement un aéroport de destination, où bien sûr un aéroport est un aéroport.
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
);
Notez la différence dans qui fait référence à qui.Pour le modèle dans l'article cela signifierait qu'un accounting_transaction
référence exactement un debit_entry
et exactement un credit_entry
, ce qui ne semble pas être l'intention de l'auteur.