Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie modellieren Sie die Vererbung in einer Datenbank effektiv?

Es gibt mehrere Möglichkeiten, die Vererbung in einer Datenbank zu modellieren. Welche Sie wählen, hängt von Ihren Bedürfnissen ab. Hier sind einige Optionen:

Tabelle pro Typ (TPT)

Jede Klasse hat ihren eigenen Tisch. Die Basisklasse enthält alle Basisklassenelemente, und jede davon abgeleitete Klasse hat ihre eigene Tabelle mit einem Primärschlüssel, der auch ein Fremdschlüssel für die Basisklassentabelle ist. die Klasse der abgeleiteten Tabelle enthält nur die verschiedenen Elemente.

Also zum Beispiel:

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

class Employee : Person {
    public DateTime StartDate;
}

Würde zu Tabellen wie:

führen
table Person
------------
int id (PK)
string firstname
string lastname

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

Tabelle pro Hierarchie (TPH)

Es gibt eine einzige Tabelle, die die gesamte Vererbungshierarchie darstellt, was bedeutet, dass einige der Spalten wahrscheinlich spärlich sein werden. Eine Unterscheidungsspalte wird hinzugefügt, die dem System mitteilt, um welche Art von Zeile es sich handelt.

Angesichts der obigen Klassen erhalten Sie diese Tabelle:

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

Für Zeilen vom Zeilentyp 0 (Person) ist das Startdatum immer null.

Tabelle-pro-Beton (TPC)

Jede Klasse hat ihre eigene vollständig geformte Tabelle ohne Verweise auf andere Tabellen.

Angesichts der obigen Klassen erhalten Sie am Ende diese Tabellen:

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

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