Sto progettando uno schema di database NoSQL - MongoDB in particolare - e mi chiedo se sia una buona idea non incorporare certe relazioni one-to-one.
Per un esempio, ho una raccolta accounts
, che memorizza tutte le informazioni sull'account. Il saldo dell'account richiede alcuni calcoli da calcolare e vedo due opzioni:
- Avere un campo
cached_balance
nella raccoltaaccounts
, che inizia come null. Ogni volta che il saldo viene ricalcolato, il campo per l'account in questione viene aggiornato. - Avere una raccolta
account_balances_cache
con una relazione uno a uno conaccounts
. Ogni volta che il saldo viene ricalcolato, il campo pertinente in questa raccolta viene aggiornato.
Il vantaggio del documento incorporato è che ottengo tutte le informazioni in un join. Una raccolta separata richiederebbe un join a livello di applicazione che non è così maneggevole.
Tuttavia, la ragione per cui ho pensato di avere una collezione separata è perché mi piace la sua separazione concettuale. C'è una raccolta per tutti i dati importanti che non devono essere persi, e ce n'è un'altra con dati che potrebbero essere ricalcolati in qualsiasi momento, dove l'intera collezione potrebbe essere eliminata e nulla del valore finale sarà stato perso. O potrebbe anche essere in un altro database che potrebbe essere tenuto su un server diverso, ecc. Questo è un ragionamento del suono o lo sto rendendo inutilmente difficile per me stesso?
(Si noti che questo è un esempio semplificato. In realtà le cose in queste cache possono essere difficili da computare a livello di calcolo, motivo per cui le inserisco nel database invece di qualcosa di simile a redis o memcached.)