Szukaj…


Tabela według hierarchii

To podejście wygeneruje jedną tabelę w bazie danych, która będzie reprezentować całą strukturę dziedziczenia.

Przykład:

public abstract class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime BirthDate { get; set; }
}

public class Employee : Person
{
    public DateTime AdmissionDate { get; set; }
    public string JobDescription { get; set; }
}

public class Customer : Person
{
    public DateTime LastPurchaseDate { get; set; }
    public int TotalVisits { get; set; }
}

// On DbContext
public DbSet<Person> People { get; set; }
public DbSet<Employee> Employees { get; set; }
public DbSet<Customer> Customers { get; set; }

Wygenerowana tabela będzie:

Tabela: Osoby Pola: Identyfikator Data urodzenia Data Dyskryminacja Wstęp Wstęp Data pracy Opis LastPurchaseDate TotalVisits

Gdzie „Discriminator” będzie nosił nazwę podklasy dziedziczenia, a „AdmissionDate”, „JobDescription”, „LastPurchaseDate”, „TotalVisits” są zerowane.

Zalety

  • Lepsza wydajność, ponieważ nie są wymagane sprzężenia, chociaż dla wielu kolumn baza danych może wymagać wielu operacji stronicowania.
  • Prosty w użyciu i tworzeniu
  • Łatwo dodać więcej podklas i pól

Niedogodności

Tabela według rodzaju

Podejście to wygeneruje (n + 1) tabele w bazie danych, aby reprezentować całą strukturę dziedziczenia, gdzie n jest liczbą podklas.

Jak:

public abstract class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime BirthDate { get; set; }
}

[Table("Employees")]
public class Employee : Person
{
    public DateTime AdmissionDate { get; set; }
    public string JobDescription { get; set; }
}

[Table("Customers")]
public class Customer : Person
{
    public DateTime LastPurchaseDate { get; set; }
    public int TotalVisits { get; set; }
}

// On DbContext
public DbSet<Person> People { get; set; }
public DbSet<Employee> Employees { get; set; }
public DbSet<Customer> Customers { get; set; }

Wygenerowana tabela będzie:

Tabela: Pola ludzi: Id Nazwa Data urodzenia

Tabela: Pola pracowników: PersonId AdmissionDate JobDescription

Tabela: Klienci: Pola: PersonId LastPurchaseDate TotalVisits

Gdzie „PersonId” na wszystkich stołach będzie kluczem podstawowym i ograniczeniem dla People.Id

Zalety

  • Znormalizowane tabele
  • Łatwe dodawanie kolumn i podklas
  • Brak zerowalnych kolumn

Niedogodności

  • Do pobrania danych wymagane jest dołączenie
  • Wnioskowanie podklas jest droższe


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow