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

alternative mongoDB per i vincoli di chiave esterna

MongoDB non ha eliminazioni a cascata. Quando l'applicazione elimina i dati, è anche responsabile della rimozione di eventuali oggetti referenziati e di eventuali riferimenti al documento eliminato. Ma di solito quando usi on delete in un database relazionale, hai un caso di composizione in cui un oggetto genitore possiede uno o più oggetti figli e gli oggetti figli non hanno significato senza il genitore. In quella situazione, MongoDB incoraggia l'incorporamento invece del riferimento . Ciò significa che crei un array nell'oggetto padre e inserisci i documenti figlio completi in quell'array invece di tenerli in una propria raccolta. In questo modo verranno eliminati insieme al genitore, perché ne fanno parte.

Sebbene mantenere più di un valore in un campo sia un divieto assoluto in SQL, non c'è nulla di sbagliato in questo in MongoDB. Questo perché il linguaggio di query MongoDB può funzionare facilmente con array e oggetti incorporati. Puoi persino creare indici su campi di documenti secondari in array, in modo da poter cercare facilmente oggetti incorporati in altri oggetti.

Quando vuoi ancora fare riferimento a oggetti da un'altra collezione, puoi usare un DBRef, oppure puoi anche usare qualsiasi altro identificatore univoco (l'unicità è una delle poche cose che possono essere imposte da MongoDB. Per farlo, crea un indice univoco con il comando createIndex ). Ma MongoDB non impone la coerenza in questo caso. È possibile creare DBRef che puntano a ObjectId inesistenti e quando il documento a cui punta DBRef viene eliminato, non accadrà nulla. L'applicazione è responsabile di assicurarsi che quando elimina un documento, tutti i documenti a cui fa riferimento vengano aggiornati.

Neanche i vincoli possono essere applicati da MongoDB. Non può nemmeno imporre un tipo specifico per un campo, a causa della natura senza schema di MongoDB. Anche in questo caso, l'applicazione è responsabile di assicurarsi che i dati inseriti in mongodb seguano specifiche specifiche. Quando vuoi automatizzare questo, sono disponibili framework di mappatura relazionale a oggetti per MongoDB per molti linguaggi di programmazione.

Per concludere: MongoDB non è "intelligente" come i database SQL. Non fa molto da solo. Fa ciò che gli viene detto di fare dall'applicazione, né più né meno. Ma questo è il motivo per cui è così veloce (nessuna costosa verifica della coerenza) e flessibile (nessuna modifica del database necessaria per implementare nuove funzionalità).