2011-01-06 20 views
7

Qual è lo schema accettato per la gestione delle relazioni molti-a-molti nella progettazione di un database di documenti?Nosql many-to-many

risposta

3

Come si desidera modellare il molti a molti dipenderà dal tipo di query che si desidera chiedere, come si desidera aggiornare i dati, ecc ... Supponiamo di avere foos correlati a barre in molti a molte moda

Si potrebbe modellare un foo come

{ 
    'bars': ['bar1', 'bar2', 'bar3'] 
} 

e modellare un bar

{ 
    'foos': ['foo_x', 'foo_y', 'foo_z'] 
} 

Oppure si potrebbe modellare il grafico o le relazioni tra i foo e bar come singoli documenti stessi

{ 
    from: 'foo1', 
    to: 'bar1' 
} 

{ 
    from: 'foo1', 
    to: 'bar2' 
} 

{ 
    from: 'foo2', 
    to: 'bar3 
} 

{ 
    from 'foo3', 
    to: 'bar3' 
} 

Ci sono molti altri modi. Come vuoi farlo dipenderà dalle domande che vuoi porre, dalle operazioni che vuoi supportare, da ciò che vuoi essere efficiente e dall'indicizzazione disponibile nel database.

2

Supponendo che stiamo parlando di casi in cui una relazione è realmente necessaria piuttosto che quelli che esistono solo perché SQL gestisce le relazioni meglio di oggetti complessi, il design è simile a quello standard per SQL - due relazioni uno a molti.

La differenza chiave è che si dispone di campi multivalore, quindi anziché un terzo documento/tabella che registra connessioni singole come una coppia di id, si dispone di un elenco di ID in ciascun documento.

Se ci si imbatte in casi in cui l'elenco diventa troppo lungo, è probabile che si guardi qualcosa che sarebbe meglio gestito dall'indicizzazione di ricerca di una relazione.

+0

lui parla di documentazione –

+0

no, questo è un "documento di database". Un "database di documenti" è qualcosa come http://www.mongodb.org/ –