sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB alternativas para restricciones de clave externa

MongoDB no tiene eliminaciones en cascada. Cuando su aplicación elimina datos, también es responsable de eliminar los objetos a los que se hace referencia y cualquier referencia al documento eliminado. Pero generalmente cuando usas on delete en una base de datos relacional, tiene un caso de composición en el que un objeto principal posee uno o más objetos secundarios, y los objetos secundarios no tienen sentido sin el principal. En esa situación, MongoDB fomenta la incrustación en lugar de la referencia . Eso significa que crea una matriz en el objeto principal y coloca los documentos secundarios completos en esa matriz en lugar de mantenerlos en una colección propia. De esa manera, se eliminarán junto con el padre, porque son parte de él.

Si bien mantener más de un valor en un campo es absolutamente imposible en SQL, no hay nada de malo en eso en MongoDB. Esto se debe a que el lenguaje de consulta de MongoDB puede funcionar fácilmente con matrices y objetos incrustados. Incluso puede crear índices en campos de subdocumentos en matrices, para que pueda buscar fácilmente objetos que están incrustados en otros objetos.

Cuando aún desee hacer referencia a objetos de otra colección, puede usar un DBRef o también puede usar cualquier otro identificador único (la singularidad es una de las pocas cosas que MongoDB puede imponer. Para hacerlo, cree un índice único con el comando createIndex ). Pero MongoDB no impone coherencia en este caso. Puede crear DBRefs que apunten a ObjectIds no existentes y cuando el documento al que apunta DBRef se elimine, no pasará nada. La aplicación es responsable de asegurarse de que cuando elimina un documento, todos los documentos que hacen referencia a él se actualicen.

MongoDB tampoco puede imponer restricciones. Ni siquiera puede imponer un tipo específico para un campo, debido a la naturaleza sin esquema de MongoDB. Nuevamente, su aplicación es responsable de asegurarse de que los datos que ingresa en mongodb sigan especificaciones específicas. Cuando desee automatizar esto, hay marcos de mapeo relacional de objetos para MongoDB para muchos lenguajes de programación disponibles.

Para resumir todo: MongoDB no es tan "inteligente" como las bases de datos SQL. No hace mucho por sí solo. Hace lo que le indica la aplicación, ni más ni menos. Pero esa es la razón por la que es tan rápido (sin costosas comprobaciones de coherencia) y flexible (no es necesario modificar la base de datos para implementar nuevas funciones).