Der er flere måder at modellere arv i en database. Hvilken du vælger afhænger af dine behov. Her er et par muligheder:
Tabel pr. type (TPT)
Hver klasse har sin egen tabel. Basisklassen har alle basisklasseelementerne i sig, og hver klasse, der stammer fra den, har sin egen tabel med en primærnøgle, som også er en fremmednøgle til basisklassetabellen; den afledte tabels klasse indeholder kun de forskellige elementer.
Så for eksempel:
class Person {
public int ID;
public string FirstName;
public string LastName;
}
class Employee : Person {
public DateTime StartDate;
}
Vil resultere i tabeller som:
table Person
------------
int id (PK)
string firstname
string lastname
table Employee
--------------
int id (PK, FK)
datetime startdate
Tabel-per-hierarki (TPH)
Der er en enkelt tabel, som repræsenterer hele arvehierarkiet, hvilket betyder, at flere af kolonnerne sandsynligvis vil være sparsomme. En diskriminatorkolonne tilføjes, som fortæller systemet, hvilken type række dette er.
I betragtning af klasserne ovenfor ender du med denne tabel:
table Person
------------
int id (PK)
int rowtype (0 = "Person", 1 = "Employee")
string firstname
string lastname
datetime startdate
For alle rækker, der er rækketype 0 (Person), vil startdatoen altid være nul.
Tabel-per-beton (TPC)
Hver klasse har sin egen fuldt udformede tabel uden henvisninger til andre tabeller.
I betragtning af klasserne ovenfor ender du med disse tabeller:
table Person
------------
int id (PK)
string firstname
string lastname
table Employee
--------------
int id (PK)
string firstname
string lastname
datetime startdate