データベースで継承をモデル化する方法はいくつかあります。どちらを選択するかは、ニーズによって異なります。ここにいくつかのオプションがあります:
タイプごとのテーブル(TPT)
各クラスには独自のテーブルがあります。基本クラスにはすべての基本クラス要素が含まれ、それから派生する各クラスには独自のテーブルがあり、主キーは基本クラステーブルの外部キーでもあります。派生テーブルのクラスには、さまざまな要素のみが含まれています。
たとえば:
class Person {
public int ID;
public string FirstName;
public string LastName;
}
class Employee : Person {
public DateTime StartDate;
}
次のようなテーブルになります:
table Person
------------
int id (PK)
string firstname
string lastname
table Employee
--------------
int id (PK, FK)
datetime startdate
Table-Per-Hierarchy(TPH)
すべての継承階層を表す単一のテーブルがあります。これは、いくつかの列がおそらくまばらであることを意味します。これがどのタイプの行であるかをシステムに通知する識別子列が追加されます。
上記のクラスを考えると、次のテーブルになります。
table Person
------------
int id (PK)
int rowtype (0 = "Person", 1 = "Employee")
string firstname
string lastname
datetime startdate
行タイプ0(Person)の行の場合、開始日は常にnullになります。
コンクリートあたりのテーブル(TPC)
各クラスには独自の完全に形成されたテーブルがあり、他のテーブルへの参照はありません。
上記のクラスを考えると、次のテーブルになります。
table Person
------------
int id (PK)
string firstname
string lastname
table Employee
--------------
int id (PK)
string firstname
string lastname
datetime startdate