Ok, se nessun altro lo dirà, io: prendere in considerazione l'utilizzo di un archivio dati NoSQL. C'è un numero che mi viene in mente:
Alla fine è necessario progettare il database (compresa la scelta dell'archivio dati) per rendere le query più importanti e frequenti dirette (e quindi anche veloci). Non c'è una risposta generale a questo.
Inoltre, dal tuo profilo ho dedotto che tu sei un programmatore C #. Ci dovrebbe essere un certo numero di framework di persistenza C # che prendono questa decisione per te, in base alla conoscenza che i loro sviluppatori hanno messo in loro.
Alla fine ti consiglio di incapsulare questo dettaglio, in modo che tu possa modificare i dettagli di questa implementazione con la modifica di una sola posizione del codice di accesso.
Per quanto riguarda SQL, vorrei andare con la soluzione proposta da Michael, perché è semplicemente più flessibile e i dati possono essere recuperati con un semplice join. Se in seguito ti rendi conto che questo è un collo di bottiglia delle prestazioni, puoi comunque spostare facilmente i dati direttamente nelle righe, a condizione che tu abbia incapsulato questa scelta.