Il tuo schema di database mi sembra uno schema di database relazionale "classico". Mongodb si adatta bene alla denormalizzazione dei dati. Immagino che quando visualizzi i percorsi carichi tutti i clienti correlati, l'autista, il camion.
Se vuoi rendere il tuo sistema davvero veloce puoi incorporare tutto nella raccolta dei percorsi.
Quindi suggerisco di seguire le modifiche al tuo schema:
- clienti - così come sono
- camion così come sono
- autisti - così come sono
-
elenco dei percorsi:
Incorpora i dati sui clienti all'interno delle fermate anziché di riferimento. Incorpora anche il camion. In questo caso lo schema sarà:
{ "route_name": "monday_1", "day": "monday", "truck": { _id = 1, // here will be all truck data }, "stops": [{ "customer": { _id = 1, //here will be all customer data } }, { "customer": { _id = 2, //here will be all customer data } }] }
-
percorsi:
Quando il conducente inizia un nuovo percorso, copia il percorso dall'elenco dei percorsi e incorpora inoltre le informazioni sul conducente:
{ //copy all route-list data (just make new id for the current route and leave reference to routes-list. In this case you will able to sync route with route-list.) "_id": "1", route_list_id: 1, "start_time": "04:31 AM", "status": "active", driver: { //embedd all driver data here }, "stops": [{ "customer": { //all customer data }, "status": "complete", "start_time": "04:45 AM", "finish_time": "04:48 AM", "elapsed_time": "3" }] }
Immagino che ti stia chiedendo cosa fare se driver, clienti o altri dati denormalizzati sono cambiati nella raccolta principale. Sì, devi aggiornare tutti i dati denormalizzati all'interno di altre raccolte. Probabilmente avrai bisogno di aggiornare miliardi di documenti (dipende dalle dimensioni del tuo sistema) e va bene. Puoi farlo in modo asincrono se ci vorrà molto tempo.
A cosa serve la struttura dei dati di cui sopra?
- Ogni documento contiene tutti i dati che potresti dover visualizzare nella tua applicazione. Quindi, ad esempio, non hai bisogno di clienti legati al carico, autista, camion quando hai bisogno di visualizzare i percorsi.
- Puoi fare qualsiasi query difficile al tuo database. Ad esempio, nel tuo schema puoi creare una query che restituirà tutti i percorsi che contengono fermate alla fermata del cliente con nome ="Fattura" (è necessario caricare prima il cliente per nome, ottenere l'ID e cercare per ID cliente nello schema corrente).
Probabilmente ti stai chiedendo che i tuoi dati possono essere non sincronizzati in alcuni casi, ma per risolvere questo problema devi solo creare alcuni unit test per assicurarti di aggiornare correttamente i tuoi dati denormolizzati.
La speranza sopra ti aiuterà a vedere il mondo da un lato non relazionale, dal punto di vista del database dei documenti.