2016-06-21 1 views
0

再利用性のために継承を使用しようとしていますが、私は以下のように 'Partner'と 'Lawyer'と 'Accountant'という基本クラスを持っています:データベースの書き込み時に継承手法を統合するには

abstract class Partner{ 

} 

class Lawyer extends Partner{ 

} 

class Accountant extends Partner{ 

} 

コードにはうってつけですが、データベースに関しては、これらの情報をdbに保存するにはどうすればいいのでしょうか?両方のエンティティに対して1つのテーブルパートナーが必要ですか?これらの2つがその属性に基づいて互いに異なるという事実に基づいて、各エンティティを識別する。 私はそれを別々のテーブルに保持し、私はパートナーに関連する別のテーブル 'cases'を持っています: ケース:case_id、subject、description、partner_id ....私の質問は、ログインして、彼がlaywer join lawyer tableであるか、またはその逆の場合、私は将来さらに多くのエンティティを追加し続けるでしょうか?

私はどのようにしてこのようなやり方で、将来私は多くのエンティティを追加しますか?dbクエリは何度も何度も変更する必要はありません。

+0

この質問(PHPを使用していませんが、あなたのコードはjava-yに見えます):http://stackoverflow.com/questions/594961/orm-inheritanceは正しい方向に向けるのに役立つようです。重要な用語は、 "ORM" - オブジェクトリレーショナルマッピングです。 –

+0

@ChrisMorgan私はdbに関する質問をしました...何も私の質問にコメントしている関連はありません。 ORMがここで何かをしなければならないと私は思っていません! – mizlul

答えて

0

私は、弁護士と弁護士を1つのテーブルパートナーに統合するという考えを支持しているとは言えません。私の提案は、あなたのDBエンティティを分離しておくことです。したがって、3つのテーブル(弁護士、会計士、およびケース)があり、ケースには弁護士および会計士からの外部キーが含まれます。この場合、内部結合は単純になります。 2つの1:1の関係を持つのに対し、パートナー表を使用すると1:Mの関係になり、弁護士と会計士の両方が得られます。それぞれはPartnersテーブル内の独自のレコードです。弁護士や会計士が独自の特質を持っているので、無駄なNULLを忘れることはありません。

0

あなたは弁護士と会計士を同じ文脈で使うつもりであるので、私は同じテーブルを使用することが理にかなっていると思います。

共通プロパティを持つpartnersテーブルを作成して、1対1の関係を持つ別のaccountantsテーブルとlawyersテーブルを作成するだけです。これは基本的に、これらの2つのテーブルが独自の自動インクリメントプライマリキーを取得しないことを意味しますが、partner_idはプライマリで、パートナーテーブルのidを参照します。

関連する問題