MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Il miglior modello per rappresentare molti a molti rapporti con attributi in MongoDB

In molti modi l'API di meteor incoraggia i documenti relazionali piatti, tuttavia MongoDB è un archivio dati non relazionale. Sfortunatamente, questo conflitto viene lasciato allo sviluppatore come esercizio da risolvere.

La nozione di struttura dello schema e join è un argomento enorme da trattare all'interno di una singola risposta, quindi cercherò di essere il più conciso possibile.

Motivi per cui dovresti scegliere un modello relazionale

Supponi di avere commenti e post di dati. Considera cosa accadrebbe se incorporassi commenti nei tuoi post.

  • DDP opera sui documenti. Tutti i commenti verranno inviati ogni volta che viene aggiunto un nuovo commento nello stesso post.

  • allow e deny le regole operano sui documenti. Potrebbe essere irragionevole aspettarsi che le stesse regole si applichino contemporaneamente sia ai post che ai commenti.

  • Le pubblicazioni tendono ad avere più senso in termini di raccolte. Nello scenario sopra, non potremmo pubblicare facilmente un elenco di commenti indipendente dai loro post.

  • I database relazionali esistono per buoni motivi. Uno di questi è evitare il problema di modifica multipla inerente alla tua seconda soluzione.

Motivi per cui dovresti scegliere un modello incorporato

  • I join non sono supportati in modo nativo da MongoDB e non esiste un pacchetto principale per produrre un join reattivo.

Raccomandazioni

Usa la tua terza soluzione. Nella mia esperienza, le ragioni per scegliere un modello relazionale superano di gran lunga le restrizioni imposte dal datastore. Ovviamente superare la mancanza di join non è facile, ma è probabile che il problema sia isolato solo per una manciata di funzioni di pubblicazione. Ecco alcune risorse che consiglio vivamente:

  • Come pubblicare una relazione molti-a-molti su EventedMind. Chris copre in dettaglio il tuo caso d'uso esatto, tuttavia esegue manualmente il join reattivo con i callback di osservazione, cosa che non consiglio.

  • Reactive si unisce a meteor dalla Discover Meteor Encyclopedia. Questo copre le basi di come e perché si dovrebbe fare un join reattivo.

  • Il capitolo sulla denormalizzazione di Discover Meteor. Questo copre molti dei punti che ho esposto sopra e parla anche di quando e come denormalizzare alcuni dei tuoi dati.

  • Puoi utilizzare Pubblica con relazioni per unire i tuoi dati. I pacchetti alternativi includono:pubblicazione intelligente, pubblicazione composita e pubblicazione semplice.

Se hai bisogno di ulteriori informazioni oltre a questo, commenta di seguito e aggiornerò la mia risposta.