Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment modéliser efficacement l'héritage dans une base de données ?

Il existe plusieurs façons de modéliser l'héritage dans une base de données. Ce que vous choisissez dépend de vos besoins. Voici quelques options :

Table par type (TPT)

Chaque classe a sa propre table. La classe de base contient tous les éléments de la classe de base, et chaque classe qui en dérive a sa propre table, avec une clé primaire qui est également une clé étrangère de la table de la classe de base ; la classe de la table dérivée ne contient que les différents éléments.

Ainsi, par exemple :

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

class Employee : Person {
    public DateTime StartDate;
}

Donnerait lieu à des tableaux comme :

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

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

Table par hiérarchie (TPH)

Il y a une seule table qui représente toute la hiérarchie d'héritage, ce qui signifie que plusieurs des colonnes seront probablement clairsemées. Une colonne discriminante est ajoutée pour indiquer au système de quel type de ligne il s'agit.

Compte tenu des classes ci-dessus, vous vous retrouvez avec ce tableau :

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

Pour toutes les lignes de type 0 (Personne), la date de début sera toujours nulle.

Table par béton (TPC)

Chaque classe a sa propre table entièrement formée sans aucune référence à d'autres tables.

Compte tenu des classes ci-dessus, vous vous retrouvez avec ces tables :

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

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