Има няколко начина за моделиране на наследяване в база данни. Кое ще изберете зависи от вашите нужди. Ето няколко опции:
Таблица за тип (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
Таблица на йерархия (TPH)
Има една таблица, която представя цялата йерархия на наследяване, което означава, че няколко от колоните вероятно ще бъдат оскъдни. Добавена е колона с дискриминатор, която казва на системата какъв тип ред е това.
Като се имат предвид класовете по-горе, в крайна сметка ще получите тази таблица:
table Person
------------
int id (PK)
int rowtype (0 = "Person", 1 = "Employee")
string firstname
string lastname
datetime startdate
За всички редове, които са тип ред 0 (Лице), началната дата винаги ще бъде нула.
Маса за бетон (TPC)
Всеки клас има своя собствена напълно оформена таблица без препратки към други таблици.
Като се имат предвид класовете по-горе, в крайна сметка получавате тези таблици:
table Person
------------
int id (PK)
string firstname
string lastname
table Employee
--------------
int id (PK)
string firstname
string lastname
datetime startdate