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

Normalizzazione MongoDB, chiave esterna e join

MongoDB non supporta le relazioni di chiave esterna lato server, anche la normalizzazione è sconsigliata. Se possibile, dovresti incorporare il tuo oggetto figlio all'interno di oggetti padre, ciò aumenterà le prestazioni e renderà totalmente superflue le chiavi esterne. Detto questo, non è sempre possibile, quindi esiste un costrutto speciale chiamato DBRef che consente di fare riferimento a oggetti in una raccolta diversa. Questo potrebbe non essere così veloce perché DB deve eseguire query aggiuntive per leggere gli oggetti ma consente una sorta di riferimento a chiave esterna.

Tuttavia dovrai gestire i tuoi riferimenti manualmente. Solo mentre cerchi il tuo DBRef vedrai se esiste, il DB non esaminerà tutti i documenti per cercare i riferimenti e rimuoverli se il target del riferimento non esiste più. Ma penso che rimuovere tutti i riferimenti dopo aver eliminato il libro richiederebbe una singola query per raccolta, non di più, quindi non è così difficile davvero.

Se il tuo schema è più complesso, probabilmente dovresti scegliere un database relazionale e non nosql.

C'è anche un libro sulla progettazione di database MongoDB:Document Design for MongoDB

AGGIORNAMENTO Il libro sopra non è più disponibile, ma a causa della popolarità di MongoDB ce ne sono molti altri. Non li collegherò tutti, poiché è probabile che tali collegamenti cambino, una semplice ricerca su Amazon mostra più pagine quindi non dovrebbe essere un problema trovarne alcuni.

Vedi la pagina di manuale di MongoDB per 'Riferimenti manuali' e DBRefs per ulteriori specifiche ed esempi