sql >> Database >  >> RDS >> Sqlserver

Hoe modelleer je overerving effectief in een database?

Er zijn verschillende manieren om overerving in een database te modelleren. Welke u kiest, hangt af van uw behoeften. Hier zijn een paar opties:

Tabel-per-type (TPT)

Elke klas heeft zijn eigen tafel. De basisklasse bevat alle basisklasse-elementen, en elke klasse die daarvan afgeleid is, heeft zijn eigen tabel, met een primaire sleutel die ook een externe sleutel is voor de basisklassetabel; De klasse van de afgeleide tabel bevat alleen de verschillende elementen.

Dus bijvoorbeeld:

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

class Employee : Person {
    public DateTime StartDate;
}

Zou resulteren in tabellen als:

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

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

Tabel-per-hiërarchie (TPH)

Er is een enkele tabel die de hele overervingshiërarchie vertegenwoordigt, wat betekent dat verschillende kolommen waarschijnlijk schaars zullen zijn. Er wordt een discriminatorkolom toegevoegd die het systeem vertelt welk type rij dit is.

Gezien de bovenstaande klassen, krijg je deze tabel:

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

Voor alle rijen die rijtype 0 (Persoon) zijn, is de startdatum altijd nul.

Tabel-per-beton (TPC)

Elke klasse heeft zijn eigen volledig gevormde tafel zonder verwijzingen naar andere tafels.

Gezien de bovenstaande klassen, krijg je deze tabellen:

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

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


  1. Top 5 PostgreSQL-hulpprogramma's voor het bewaken van query's

  2. Uitzondering door gebruiker definiëren definiëren met PRAGMA EXCEPTION_INIT

  3. pg -v 0.17.1 installeren

  4. SQLException:geen geschikt stuurprogramma gevonden