2016-04-28 8 views
0

抽象クラス "候補"に継承される抽象クラス "Person"があります。後者には、保持された候補(インタビュー用)、認められた候補者...どのようにデータベースでそれを表現できますか?
ありがとうございますrelationnalデータベースで階層的継承を持つクラスを表現する方法

+0

これは誤った継承の使用です。人は候補者の役割を果たすかもしれませんが、必ずしも常に候補者になるとは限りません。組成物を使用する。人は多くの役割を果たしますが、そのうちの1つは候補になることができます。また、そのステータスもサブタイプであってはなりません。そのための "ステータス"の列を使用 –

+0

あなたの答えをありがとう、あなたは構成によってどういう意味ですか – hereForLearing

+0

私は、継承を使用しないことを意味します:)あなたはPersonとPersonRolesの間にone2many関係が必要です –

答えて

0

多くのデータ項目がない場合は、タイプフィールドを持つ単一のテーブルを作成してください。多数の列またはバリエーションがある場合は、バリアントのテーブルを作成し、それらをマスターテーブルにリンクします。

+0

階層レベルが1つしかない場合(つまり、Personから継承された候補が残っている場合など)、階層レベルが2段階になっていますが、これを行う方法がわかりません – hereForLearing

1

これは誤った継承の使用です。人は候補者の役割を果たすかもしれませんが、必ずしも常に候補者になるとは限りません。組成物を使用する。人は多くの役割を果たしますが、そのうちの1つは候補になることができます。彼らは後で従業員になることができます。また、そのステータスもサブタイプであってはなりません。それには「ステータス」列を使用します。このような

何か:

create table people (
    person_id int primary key, 
    name text, 
    ... 
); 

create table person_roles (
    person_id int references people(person_id), 
    type text check (type in ('Candidate', '...')), 
    candidate_status text check (candidate_status in ('Retained','Admitted')), 

    primary key (person_id, type) 
); 

継承の正しい使い方は人がAbstractLegalPartyを拡張するだろう。組織または会社もAbstractLegalPartyを拡張します。

+0

なぜあなたが含まれているのですか主キーを入力しますか?私はUMLクラス図で例を挙げましたが、私は以下の構造を持っています:Person(抽象クラ​​ス)は、候補者、スタッフ、管理者に継承され、候補は2つのサブクラスを持っています:認められ、保持された候補者は、これは正しいですか? – hereForLearing

+0

@saywowは、複数の役割を持つことができますが、与えられたタイプの役割は1つだけです –

+0

私はUMLの中で、候補者、スタッフ、管理者が継承するPerson(抽象クラ​​ス)を表します。私があなたが言ったようにデータベースでそれを表現したいとき、それは正しいのですか?人、メンバー、候補者が同じ階層レベルを持っているかのようには見えません。 – hereForLearing

関連する問題