sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan modellerer du effektivt arv i en database?

Der er flere måder at modellere arv i en database. Hvilken du vælger afhænger af dine behov. Her er et par muligheder:

Tabel pr. type (TPT)

Hver klasse har sin egen tabel. Basisklassen har alle basisklasseelementerne i sig, og hver klasse, der stammer fra den, har sin egen tabel med en primærnøgle, som også er en fremmednøgle til basisklassetabellen; den afledte tabels klasse indeholder kun de forskellige elementer.

Så for eksempel:

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

class Employee : Person {
    public DateTime StartDate;
}

Vil resultere i tabeller som:

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

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

Tabel-per-hierarki (TPH)

Der er en enkelt tabel, som repræsenterer hele arvehierarkiet, hvilket betyder, at flere af kolonnerne sandsynligvis vil være sparsomme. En diskriminatorkolonne tilføjes, som fortæller systemet, hvilken type række dette er.

I betragtning af klasserne ovenfor ender du med denne tabel:

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

For alle rækker, der er rækketype 0 (Person), vil startdatoen altid være nul.

Tabel-per-beton (TPC)

Hver klasse har sin egen fuldt udformede tabel uden henvisninger til andre tabeller.

I betragtning af klasserne ovenfor ender du med disse tabeller:

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

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


  1. Oracle:hvad er situationen for at bruge RAISE_APPLICATION_ERROR?

  2. Vil et SQL Server-job springe en planlagt kørsel over, hvis det allerede kører?

  3. Gem byte[] i en SQL Server-database fra C#

  4. Rails og PostgreSQL:Rolle postgres eksisterer ikke