Zoeken…


Tabel per hiërarchie

Deze aanpak genereert één tabel in de database om de volledige overervingsstructuur weer te geven.

Voorbeeld:

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; }

De gegenereerde tabel is:

Tabel: Personen Velden: ID Naam Geboortedatum Discrimitator Toelatingsdatum Datum Functie Omschrijving Laatste Aankoop Datum Totaal Bezoeken

Waar 'Discriminator' de naam van de subklasse op de overerving zal behouden en 'AdmissionDate', 'JobDescription', 'LastPurchaseDate', zijn 'TotalVisits' nulbaar.

voordelen

  • Betere prestaties omdat geen joins nodig zijn, hoewel voor veel kolommen de database mogelijk veel paging-bewerkingen vereist.
  • Eenvoudig te gebruiken en te maken
  • Eenvoudig om meer subklassen en velden toe te voegen

nadelen

Tabel per type

Deze benadering genereert (n + 1) tabellen in de database om alle overervingsstructuren weer te geven waarbij n het aantal subklassen is.

Hoe:

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; }

De gegenereerde tabel is:

Tabel: Personen Velden: ID Naam Geboortedatum

Tabel: Werknemersvelden: PersonId AdmissionDate JobDescription

Tabel: Klanten: Velden: PersonId LastPurchaseDate TotalVisits

Waar 'PersonId' op alle tabellen een primaire sleutel en een beperking voor People.Id zal zijn

voordelen

  • Genormaliseerde tabellen
  • Eenvoudig kolommen en subklassen toevoegen
  • Geen nulbare kolommen

nadelen

  • Lid worden is vereist om de gegevens op te halen
  • Subklasse-gevolgtrekking is duurder


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow