sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo se modela efectivamente la herencia en una base de datos?

Hay varias formas de modelar la herencia en una base de datos. El que elijas depende de tus necesidades. Aquí hay algunas opciones:

Tabla por tipo (TPT)

Cada clase tiene su propia tabla. La clase base contiene todos los elementos de la clase base, y cada clase que se deriva de ella tiene su propia tabla, con una clave principal que también es una clave externa para la tabla de la clase base; la clase de la tabla derivada contiene solo los diferentes elementos.

Entonces, por ejemplo:

class Person {
    public int ID;
    public string FirstName;
    public string LastName;
}

class Employee : Person {
    public DateTime StartDate;
}

Daría como resultado tablas como:

table Person
------------
int id (PK)
string firstname
string lastname

table Employee
--------------
int id (PK, FK)
datetime startdate

Tabla por jerarquía (TPH)

Hay una sola tabla que representa toda la jerarquía de herencia, lo que significa que varias de las columnas probablemente estarán dispersas. Se agrega una columna discriminadora que le dice al sistema qué tipo de fila es.

Dadas las clases anteriores, terminas con esta tabla:

table Person
------------
int id (PK)
int rowtype (0 = "Person", 1 = "Employee")
string firstname
string lastname
datetime startdate

Para cualquier fila que sea de tipo de fila 0 (Persona), la fecha de inicio siempre será nula.

Tabla por hormigón (TPC)

Cada clase tiene su propia tabla completamente formada sin referencias a ninguna otra tabla.

Dadas las clases anteriores, terminas con estas tablas:

table Person
------------
int id (PK)
string firstname
string lastname

table Employee
--------------
int id (PK)
string firstname
string lastname
datetime startdate