Claves foráneas en MongoDB
MongoDB es una base de datos muy conocida que funciona sin esquema. En su lugar, utiliza archivos similares a JSON para almacenar datos y no impone ninguna estructura.
MongoDB, a diferencia de los RDBMS tradicionales, requiere un enfoque distinto para el diseño de la base de datos. Pero, en general, la base de datos es más fácil de escalar porque no impone muchas restricciones.
Clave externa
Una clave externa es una columna o un conjunto de columnas que vinculan dos tablas. Comprende una columna de clave principal en la tabla principal vinculada a otras columnas en las tablas secundarias.
Tomemos, por ejemplo, dos tablas: país y ciudad. Queremos vincular estas dos tablas de manera que cada ciudad esté asociada con el país correspondiente.
Se puede usar una clave externa para lograr esto:
Si leemos los datos de la tabla de ciudades del ejemplo anterior, podemos ver que cada ciudad tiene un country_id.
asociado. Esto le permitirá buscar todas las ciudades de Pakistán con una sola consulta.
Al crear claves externas, podemos especificar qué debe suceder si los datos se modifican o destruyen. Por ejemplo, podemos elegir la cascada, lo que significa que si se elimina un país, también se eliminan todas las ciudades vinculadas a él.
También podemos establecer nulo, lo que significa que cuando se eliminan los datos en la base de datos del país, las ciudades vinculadas se establecen en nulo.
Referencias MongoDB
Por lo general, MongoDB no funciona con el concepto de claves externas. Sin embargo, las bases de datos relacionales pueden usar claves foráneas para visualizar datos de múltiples colecciones simultáneamente.
La forma en que MongoDB almacena datos también es diferente. Por ejemplo, MongoDB usa colecciones, objetos y campos en lugar de usar tablas, columnas y filas.
MongoDB ofrece dos formas diferentes de almacenar datos en colecciones: desnormalización y normalización.
desnormalización
En la desnormalización, la misma colección contiene una variedad de datos.
El siguiente ejemplo demuestra cómo las direcciones
vinculadas con cada persona se han integrado en la colección de personas
.
> db.persons.findOne()
{
name: 'Ali Ikram',
addresses : [
{ street: '123 PWD', city: 'Rawalpindi', cc: 'PAK' },
{ street: '123 ABC', city: 'Faisalabad', cc: 'PAK' }
]
}
Es adecuado para uno a pocos. Su ventaja es que no es necesario realizar consultas adicionales a otro documento.
Sin embargo, no puede gestionar la entidad de los documentos incrustados individualmente.
Normalización
En la normalización, diferentes datos se almacenan en varias colecciones. El proceso es similar al almacenamiento de datos en bases de datos relacionales, pero en lugar de tablas, usamos colecciones.
En MongoDB, las referencias se utilizan principalmente para el proceso de normalización. Las referencias de la tabla de niños (generalmente un ID de objeto) se incrustan en la tabla principal.
Al leer la información, el usuario tiene que realizar varias consultas para recuperar datos de múltiples colecciones.
Por ejemplo, tomaremos las siguientes dos colecciones, estudiantes
y cursos
. Un curso contendrá muchos estudiantes a los que se hace referencia en la colección de cursos
.
Puede definir la llamada clave externa en MongoDB. Sin embargo, debe mantener la integridad de los datos POR USTED MISMO.
Ejemplo:
students
{
_id: ObjectId(...),
name: 'Haris',
courses: ['chem101', 'chem102'] // <= ids of the courses
}
courses
{
_id: 'chem101',
name: 'Chemistry 101',
description: 'Introduction to Chemistry'
}
El campo cursos
contiene _id
de cursos. Es bastante simple definir una relación de uno a muchos.
Sin embargo, si desea recuperar los nombres de los cursos del estudiante Haris,
, deberá realizar otra operación para recuperar el documento cursos
a través de _id.
.
Si se elimina el curso chem101
, debemos realizar otra operación para actualizar el campo cursos
en el documento estudiantes
.
Crear claves foráneas virtuales en MongoDB
DbSchema guarda la imagen local del esquema en el archivo del modelo. Esto significa que puede trabajar en el proyecto sin conexión sin necesidad de conectarse a la base de datos.
Después de volver a conectarse, puede comparar y sincronizar las diferencias entre la base de datos y su archivo de proyecto local. También puede construir relaciones de clave externa virtual con un archivo de proyecto.
Estas claves externas solo se pueden usar en DbSchema y no afectan la base de datos.
Las llaves foráneas se pueden hacer rápida y fácilmente. Tome las colecciones de ciudades
y países
, por ejemplo. Para su referencia, ambos tendrán un campo común llamado “id del país”.
Arrastre y suelte una columna sobre la otra para crear una clave externa. Esto creará una nueva ventana donde puede dar una descripción a la clave externa y agregar campos adicionales.
Use claves foráneas virtuales para una navegación de datos más rápida en MongoDB
Puede navegar por los datos de sus colecciones utilizando la clave externa virtual. Además, el Editor de datos relacionales le permite buscar simultáneamente datos de muchas colecciones.
Puede navegar rápidamente por las ciudades conectadas con los países utilizando la clave externa.
Conclusión
Con la ayuda de este artículo del tutorial de MongoDB, aprendió a visualizar su colección de MongoDB como diagramas y crear claves externas virtuales con DbSchema. Ahora también debería poder buscar datos de diferentes colecciones simultáneamente.
Además, las claves foráneas virtuales solo se almacenarán en el archivo del proyecto local y no afectarán a la base de datos.