Sök…


Tabell per hierarki

Detta tillvägagångssätt genererar en tabell i databasen för att representera alla arvstrukturen.

Exempel:

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

Den genererade tabellen är:

Tabell: Människor Fält: Id-namn FödelseDatum Diskriminerare AntagningDatum Jobb Beskrivning Sista KöpDatum Totalt Besök

Där 'Diskriminator' kommer att innehålla namnet på underklassen på arvet och 'AdmissionDate', 'JobDescription', 'LastPurchaseDate', 'TotalVisits' är nollbara.

fördelar

  • Bättre prestanda eftersom inga sammanfogningar krävs, även om databasen för många kolumner kan kräva många sökningsåtgärder.
  • Enkelt att använda och skapa
  • Lätt att lägga till fler underklasser och fält

nackdelar

Tabell per typ

Detta tillvägagångssätt kommer att generera (n + 1) tabeller i databasen för att representera alla arvstrukturen där n är antalet underklasser.

Hur:

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

Den genererade tabellen är:

Tabell: Folkfält: Id-namn Födelsedatum

Tabell: Anställdes fält: PersonId AdmissionDate JobBeskrivning

Tabell: Kunder: Fält: PersonId LastPurchaseDate TotalVisits

Där 'PersonId' på alla tabeller kommer att vara en primär nyckel och en begränsning för People.Id

fördelar

  • Normaliserade tabeller
  • Lätt att lägga till kolumner och underklasser
  • Inga nollbara kolumner

nackdelar

  • Gå med krävs för att hämta data
  • Underklassklassstörning är dyrare


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow