Come scegliere la progettazione dello schema per un modello di dominio strutturato ad albero

1

Ho le seguenti classi che voglio memorizzare.

public class StorableObject
{
    public string Id { get; set; }
}

public class User : StorableObject
{
    public string Name { get; set; }
}

public class Project : StorableObject
{
    public string Name { get; set; }
    public User Owner { get; set; }
    public ICollection<Task> Tasks { get; set; }
}

public class Task : StorableObject
{
    public string Name { get; set; }
    public User Owner { get; set; }
    public ICollection<Timesheet> TimeSheets { get; set; }
}

public class Timesheet : StorableObject
{
    public User Owner { get; set; }
    public DateTime Timestamp { get; set; }
    public TimeSpan Duration { get; set; }
}

Il design dello schema ha molto a che fare con le query di cui avrai bisogno, quindi lascia che provi a spiegare un po '. Dovrò fare query veloci per estrarre:

  • tutte le attività su un progetto
  • tutti i fogli di lavoro su un'attività
  • tutti i progetti che un utente possiede
  • tutte le attività di cui è proprietario un utente
  • tutte le schede personali di un utente.

Ho anche bisogno di alcune sommazioni come ottenere il tempo totale speso per un progetto o attività in un dato periodo di tempo e la spesa totale per utente in un dato periodo. (MapReduse suppongo)

Ho iniziato (dopo aver letto questo blog ) con 4 raccolte (Utenti, Progetti, Compiti, fogli di lavoro), ogni bambino avrebbe un riferimento genitore quindi potrei costruire il mio modello di dominio nella mia logica aziendale.

Tuttavia dopo aver visto questo Ho cambiato idea e ora sto adottando un approccio più integrato.

{
   _id: 123456789,
   owner_id: 123,
   name: "My Project",
   tasks: [
            {
               owner_id: 123,
               name: "My Task",
               timesheets: [
                             {
                                owner_id: 123,
                                ...
                             }
                           ]
            }
          ]
}

Che cosa ne pensi? È una progettazione veloce dello schema?

    
posta Snæbjørn 10.04.2013 - 23:46
fonte

0 risposte

Leggi altre domande sui tag