sql >> Databáze >  >> RDS >> Sqlserver

Jak efektivně modelujete dědičnost v databázi?

Existuje několik způsobů, jak modelovat dědičnost v databázi. Které si vyberete, závisí na vašich potřebách. Zde je několik možností:

Table-Per-Type (TPT)

Každá třída má svou vlastní tabulku. Základní třída má v sobě všechny elementy základní třídy a každá třída, která se z ní odvozuje, má svou vlastní tabulku s primárním klíčem, který je také cizím klíčem tabulky základní třídy; třída odvozené tabulky obsahuje pouze různé prvky.

Takže například:

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

class Employee : Person {
    public DateTime StartDate;
}

Výsledkem by byly tabulky jako:

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

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

Table-Per-Hierarchy (TPH)

Existuje jedna tabulka, která představuje celou hierarchii dědičnosti, což znamená, že několik sloupců bude pravděpodobně řídkých. Je přidán sloupec diskriminátoru, který říká systému, o jaký typ řádku se jedná.

Vzhledem k výše uvedeným třídám skončíte s touto tabulkou:

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

U všech řádků s typem řádku 0 (Person) bude počáteční datum vždy null.

Table-Per-Concrete (TPC)

Každá třída má svou vlastní plně vytvořenou tabulku bez odkazů na jiné tabulky.

Vzhledem k výše uvedeným třídám skončíte s těmito tabulkami:

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

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


  1. Jak šifrovat provoz databáze hybridního cloudu

  2. Špinavá tajemství výrazu CASE

  3. Proč SQL Server automaticky ignoruje prázdné místo na konci?

  4. Co je nového v Postgres-XL 9.6