Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как ефективно моделирате наследяването в база данни?

Има няколко начина за моделиране на наследяване в база данни. Кое ще изберете зависи от вашите нужди. Ето няколко опции:

Таблица за тип (TPT)

Всеки клас има своя собствена маса. Базовият клас има всички елементи на базовия клас в него и всеки клас, който произлиза от него, има своя собствена таблица, с първичен ключ, който също е външен ключ към таблицата на базовия клас; класът на извлечената таблица съдържа само различните елементи.

Така например:

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

class Employee : Person {
    public DateTime StartDate;
}

Ще доведе до таблици като:

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

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

Таблица на йерархия (TPH)

Има една таблица, която представя цялата йерархия на наследяване, което означава, че няколко от колоните вероятно ще бъдат оскъдни. Добавена е колона с дискриминатор, която казва на системата какъв тип ред е това.

Като се имат предвид класовете по-горе, в крайна сметка ще получите тази таблица:

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

За всички редове, които са тип ред 0 (Лице), началната дата винаги ще бъде нула.

Маса за бетон (TPC)

Всеки клас има своя собствена напълно оформена таблица без препратки към други таблици.

Като се имат предвид класовете по-горе, в крайна сметка получавате тези таблици:

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

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изчислим общите часове за пътуване между град x и y и обратно

  2. SQL Server 2016:Създайте връзка

  3. Как да поддържате реда на вмъкване в SQL Server

  4. Как да изпращате имейли от SQL Server (T-SQL)

  5. Най-ефективният начин в SQL Server за получаване на дата от дата+час?