我正在为一个巨大的应用程序设计一个数据库模式。我有不同类型的对象(建筑物、土地等,共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/

10-10 19:10