Stiamo sviluppando un sito web di e-learning in cui è possibile praticare LearnItem (in genere parole di una lingua straniera). Il concetto è molto simile a Memrise.
Quando un utente pratica un LearnItem, viene creato un oggetto Result (contiene la data della risposta, più un flag per indicare se la risposta fornita dall'utente era corretta)
I LearnItem sono raggruppati in LearnItemLists e un utente può scegliere di creare la propria LearnItemList o usarne uno esistente (ad esempio LearnItemList "Le 1000 parole inglesi più comuni", che ha 1000 LearnItems)
Questo è il punto in cui abbiamo opinioni divergenti nel team. Quando un utente desidera utilizzare un LearnItemList esistente, creato da qualcun altro, quindi
Versione A:
Archiviamo la stessa istanza LearnItemList per ogni utente che ha sottoscritto lo stesso LearnItemList. Ciò significa che dobbiamo archiviare i risultati per ogni User + LearnItem in una struttura separata, poiché un LearnItem appartiene a diversi utenti.
Versione B:
Copia in profondità tutte le LearnItemLists.
Copiamo il LearnItemList con tutti i suoi LearnItem per ogni utente che si è iscritto. In questo modo possiamo memorizzare i risultati per il LearnItem per l'utente dato semplicemente facendo riferimento a User.LearnItemList.LearnItem.Results
Entrambe le versioni hanno pro e contro, ma in generale, quale ha più senso?