Existuje několik způsobů, jak modelovat dědičnost v databázi. Které si vyberete, závisí na vašich potřebách. Zde je několik možností:
Table-Per-Type (TPT)
Každá třída má svou vlastní tabulku. Základní třída má v sobě všechny elementy základní třídy a každá třída, která se z ní odvozuje, má svou vlastní tabulku s primárním klíčem, který je také cizím klíčem tabulky základní třídy; třída odvozené tabulky obsahuje pouze různé prvky.
Takže například:
class Person {
public int ID;
public string FirstName;
public string LastName;
}
class Employee : Person {
public DateTime StartDate;
}
Výsledkem by byly tabulky jako:
table Person
------------
int id (PK)
string firstname
string lastname
table Employee
--------------
int id (PK, FK)
datetime startdate
Table-Per-Hierarchy (TPH)
Existuje jedna tabulka, která představuje celou hierarchii dědičnosti, což znamená, že několik sloupců bude pravděpodobně řídkých. Je přidán sloupec diskriminátoru, který říká systému, o jaký typ řádku se jedná.
Vzhledem k výše uvedeným třídám skončíte s touto tabulkou:
table Person
------------
int id (PK)
int rowtype (0 = "Person", 1 = "Employee")
string firstname
string lastname
datetime startdate
U všech řádků s typem řádku 0 (Person) bude počáteční datum vždy null.
Table-Per-Concrete (TPC)
Každá třída má svou vlastní plně vytvořenou tabulku bez odkazů na jiné tabulky.
Vzhledem k výše uvedeným třídám skončíte s těmito tabulkami:
table Person
------------
int id (PK)
string firstname
string lastname
table Employee
--------------
int id (PK)
string firstname
string lastname
datetime startdate