我正在为一个巨大的应用程序设计一个数据库模式。我有不同类型的对象(建筑物、土地等,共9个),所有这些对象都有两种所有者:个人和公司。每个对象可以具有具有不同共享的不同类型的多个所有者,并且每个所有者可以具有多种类型的属性。多对多多态关系应该可以解决这个问题,但是我如何用传统的方法来解决这个问题呢?
最佳答案
你想要一个抽象类型的“党”,具体类型的“个人”和“组织”(比如说,你可以扩展到公司或政府)。以及描述组织所有权的表。
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
关于postgresql - 多对多多态关系替代,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36653397/