Existem várias maneiras de modelar a herança em um banco de dados. Qual você escolhe depende de suas necessidades. Aqui estão algumas opções:
Tabela por tipo (TPT)
Cada classe tem sua própria tabela. A classe base tem todos os elementos da classe base nela, e cada classe que deriva dela tem sua própria tabela, com uma chave primária que também é uma chave estrangeira para a tabela da classe base; a classe da tabela derivada contém apenas os diferentes elementos.
Assim, por exemplo:
class Person {
public int ID;
public string FirstName;
public string LastName;
}
class Employee : Person {
public DateTime StartDate;
}
Resultaria em tabelas como:
table Person
------------
int id (PK)
string firstname
string lastname
table Employee
--------------
int id (PK, FK)
datetime startdate
Tabela por hierarquia (TPH)
Há uma única tabela que representa toda a hierarquia de herança, o que significa que várias das colunas provavelmente serão esparsas. Uma coluna discriminadora é adicionada, informando ao sistema que tipo de linha é essa.
Dadas as classes acima, você acaba com esta tabela:
table Person
------------
int id (PK)
int rowtype (0 = "Person", 1 = "Employee")
string firstname
string lastname
datetime startdate
Para todas as linhas que são tipo de linha 0 (Pessoa), a data de início sempre será nula.
Tabela por concreto (TPC)
Cada classe tem sua própria tabela totalmente formada sem referências a outras tabelas.
Dadas as classes acima, você acaba com estas tabelas:
table Person
------------
int id (PK)
string firstname
string lastname
table Employee
--------------
int id (PK)
string firstname
string lastname
datetime startdate