Istnieje kilka sposobów modelowania dziedziczenia w bazie danych. To, który wybierzesz, zależy od Twoich potrzeb. Oto kilka opcji:
Tabela na typ (TPT)
Każda klasa ma swój własny stół. Klasa bazowa zawiera wszystkie elementy klasy bazowej, a każda klasa, która się z niej wywodzi, ma swoją własną tabelę, z kluczem podstawowym, który jest również kluczem obcym do tabeli klasy bazowej; klasa tabeli pochodnej zawiera tylko różne elementy.
Na przykład:
class Person {
public int ID;
public string FirstName;
public string LastName;
}
class Employee : Person {
public DateTime StartDate;
}
Dałoby to tabele takie jak:
table Person
------------
int id (PK)
string firstname
string lastname
table Employee
--------------
int id (PK, FK)
datetime startdate
Tabela na hierarchię (TPH)
Istnieje pojedyncza tabela, która reprezentuje całą hierarchię dziedziczenia, co oznacza, że kilka kolumn będzie prawdopodobnie nielicznych. Dodawana jest kolumna dyskryminacyjna, która informuje system, jaki to jest typ wiersza.
Biorąc pod uwagę powyższe klasy, otrzymujesz tę tabelę:
table Person
------------
int id (PK)
int rowtype (0 = "Person", 1 = "Employee")
string firstname
string lastname
datetime startdate
Dla wszystkich wierszy, które mają typ wiersza 0 (osoba), data rozpoczęcia zawsze będzie równa null.
Stół na beton (TPC)
Każda klasa ma własną, w pełni uformowaną tabelę bez odniesień do innych tabel.
Biorąc pod uwagę powyższe klasy, otrzymujesz następujące tabele:
table Person
------------
int id (PK)
string firstname
string lastname
table Employee
--------------
int id (PK)
string firstname
string lastname
datetime startdate