Ho le seguenti entità nel mio database (è semplificato):
- Studente (id)
- StudentCourse (id, student_id, course_id)
- Corso (id)
- Lezione (id)
- LessonCourse (id, lesson_id, course_id)
- StudentCourseLesson (id, student_id, course_id, lesson_id, completato)
-
Lo studente può iscriversi a un corso (l'entità StudentCourse è in fase di creazione).
-
Ogni corso è composto da lezioni e una lezione può far parte di più corsi.
-
Lo studente è in grado di contrassegnare una lezione specifica in un corso specifico come "completata".
Il problema:
Le entità StudentCourseLesson devono essere pre-inserite nel database nel momento in cui l'utente si iscrive al corso con i valori predefiniti (centinaia di righe), o dovrebbero essere create al volo, nel momento in cui l'utente inizierà qualche interazione con lo specifico lezione del corso specifico (come segnarne uno come completato)?
Cosa posso pensare:
- La prima opzione rende il mio codice server più pulito (non c'è bisogno di verifiche se l'entità esiste nel database) e rende tutto nel database esistente nello "stato ben definito" ma fa sì che gli inserimenti massicci aumentino ad ogni iscrizione, e anche se potrebbe non essere un problema in questo caso, posso vedere come può diventare rapidamente un problema come modello di progettazione in alcune relazioni più complesse (scarsa scalabilità?).
- La seconda opzione distribuisce il lavoro del database in tempo di più, ma sembra molto brutto. È fondamentalmente una "creazione pigra" delle entità. Cosa fare se dovrò visualizzare l'elenco delle lezioni con lo stato "completato"? Potrei anche crearli tutti a questo punto.
Personalmente mi chiamo verso la prima opzione nel mio caso d'uso, ma mi chiedo se non mi sia mancato nulla considerando questo problema. Come dovrebbe essere gestito questo tipo di relazioni?