抽象的なタイプの「党」、具体的なタイプ「個人」と「組織」(会社や政府に拡張することができます)が必要です。組織の所有権を説明する表。
create table parties (
party_id int primary key,
type text not null check (...),
individual_name text null,
organization_name text null,
check (/* validate columns for given types */)
);
create table shareholders (
shareholder_party_id int references parties(party_id),
organization_party_id int references parties(party_id),
share decimal(...) not null,
primary key (shareholder_party_id, organization_party_id),
check (...)
);
insert into table parties values
(1, 'Individual', 'Alice', null),
(2, 'Individual', 'Bob', null)
(3, 'Organization', null, 'Alice and Bob Co.');
insert into shareholders values
(1, 3, 0.5), --Alice owns 50% of Alice and Bob Co.
(2, 3, 0.5); --Bob owns 50% of Alice and Bob Co.
insert into assets (asset_id, owner_id) values (1, 3); --Alice and Bob Co own Asset 1