まず、継承が必要な動作を実装するための最良の方法であるかどうかを検討してください。一般に、継承よりも構成を優先するのが最善です。あなたの図から、問題を解決するために継承はまったく必要ないと思います。
継承を実装する必要がある場合は、使用できる戦略がいくつかあります。優れたオブジェクト リレーショナル マッパーを探すと、以下の戦略をより簡単に実装できるため、非常に良い考えです。.NET を使用している場合は、NHibernateまたはEntity Frameworkが適切なオプションです。Java Hibernateの場合、かなり優れています。
クラス階層ごとの表
ここでは、クラス階層全体に対して 1 つのテーブルを作成します。これは、階層内のすべてのクラスが多くの列を共有している場合に最も意味があります。各行が属するサブクラスを識別できるように、「識別子」列を追加する必要があります。あなたの例では、
サブクラス間に多くの異なる列がないように見えるため、この戦略はあなたにとって最も理にかなっていると思います。
サブクラスごとのテーブル
この例では、サブクラスごとにテーブルを作成します。これは、継承階層内のクラスが多くの共通列を共有していない場合に最も意味があります。
したがって、次のようなテーブルがあります。
- 製品ギャラリー
- logbook_gallerys
- 商品写真
- logbook_picture
クラスごとのテーブル
これはあなたの図からの戦略です。table per-subclass と同様に、これは各サブクラスに異なる列がある場合に便利です。table-per-subclass に対する利点は、1 つの大きな結合でクラス階層全体をクエリする方が簡単であることです。欠点は、多くのテーブルが作成されることです。