sql >> Databasteknik >  >> RDS >> Sqlserver

Hur modellerar man effektivt arv i en databas?

Det finns flera sätt att modellera arv i en databas. Vilket du väljer beror på dina behov. Här är några alternativ:

Tabell-per-typ (TPT)

Varje klass har sin egen tabell. Basklassen har alla basklasselement i sig, och varje klass som härrör från den har sin egen tabell, med en primärnyckel som också är en främmande nyckel till basklasstabellen; den härledda tabellens klass innehåller bara de olika elementen.

Så till exempel:

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

class Employee : Person {
    public DateTime StartDate;
}

Skulle resultera i tabeller som:

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

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

Tabell-per-hierarki (TPH)

Det finns en enda tabell som representerar hela arvshierarkin, vilket innebär att flera av kolumnerna förmodligen kommer att vara glesa. En diskriminatorkolumn läggs till som talar om för systemet vilken typ av rad detta är.

Med tanke på klasserna ovan får du denna tabell:

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

För alla rader som är radtyp 0 (Person), kommer startdatumet alltid att vara null.

Tabell-per-betong (TPC)

Varje klass har sin egen fullständiga tabell utan referenser till några andra tabeller.

Med tanke på klasserna ovan får du dessa tabeller:

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

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


  1. Hitta dubbletter i en kolumn

  2. SQL Server:Hämta tabell primärnyckel med SQL-fråga

  3. Lär dig MySQL / MariaDB för nybörjare – del 1

  4. MariaDB SQL Set Operators