2016-04-15 15 views
1

私は巨大なアプリケーション用のデータベーススキーマを設計しています。私はさまざまなタイプのオブジェクト(建物、土地など、それらの合計9個)を所有しています。それらはすべて、人と企業の2種類の所有者を持っています。各オブジェクトは、異なる共有の異なるタイプの複数の所有者を持つことができ、各所有者は複数のタイプのプロパティを持つことができます。多対多多型関係はこれを解決するはずですが、どのように従来の方法でこれを行うのですか?多対多多型関係代替

答えて

0

抽象的なタイプの「党」、具体的なタイプ「個人」と「組織」(会社や政府に拡張することができます)が必要です。組織の所有権を説明する表。

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