Chuck's Academy

Base de Datos

Modelado de Datos en NoSQL

En este capítulo, exploraremos el proceso de modelado de datos en bases de datos NoSQL, centrándonos en MongoDB. A diferencia de las bases de datos relacionales, donde el esquema está rígidamente definido a través de tablas y relaciones, las bases de datos NoSQL permiten una mayor flexibilidad al modelar datos, lo que nos da la posibilidad de adaptarnos a datos no estructurados o que cambian con frecuencia.

Colecciones y Documentos

En MongoDB, los datos se almacenan en colecciones, que son el equivalente a las tablas en bases de datos relacionales. Cada colección contiene múltiples documentos, que son estructuras flexibles de datos en formato JSON.

Ejemplo de Documento

Un documento en MongoDB es similar a un objeto JSON. Aquí tienes un ejemplo de un documento que podría estar en una colección llamada users:

json
"Este documento representa a un usuario llamado Alice, con un campo _id que actúa como identificador único, y un arreglo llamado orders que contiene dos pedidos realizados por el usuario."

Estructura Flexible

Una de las mayores ventajas de MongoDB es su estructura flexible. A diferencia de SQL, donde todas las filas de una tabla deben seguir el mismo esquema, en MongoDB cada documento puede tener un conjunto de campos diferente. Por ejemplo, podemos agregar un nuevo documento a la colección users con campos adicionales o menos campos que el anterior:

json
"Este documento representa un usuario llamado Bob, con menos campos que el documento de Alice, ya que no incluye la edad ni pedidos. MongoDB no requiere que todos los documentos tengan los mismos campos."

Relaciones en NoSQL

Aunque MongoDB no utiliza relaciones en el sentido tradicional de las bases de datos relacionales, podemos establecer relaciones entre los documentos utilizando referencias o incrustaciones.

Incrustación de Documentos

Podemos incrustar documentos dentro de otros documentos cuando los datos están estrechamente relacionados y queremos evitar realizar múltiples consultas. En el ejemplo anterior, los orders están incrustados en el documento users, lo que facilita la consulta de todos los pedidos de un usuario en una sola operación.

json
"Aquí estamos incrustando un arreglo de pedidos dentro del documento de Charlie, lo que nos permite acceder a los datos del usuario y sus pedidos en una sola consulta."

Referencias entre Documentos

En algunos casos, los datos pueden estar más separados y ser de gran tamaño, por lo que es preferible utilizar referencias entre documentos en lugar de incrustaciones. Por ejemplo, podemos tener una colección users y una colección orders, donde los documentos de orders hacen referencia a los users mediante el campo user_id:

json
"Este documento en la colección orders hace referencia al usuario con id igual a uno, usando el campo user_id."

Diseño de Esquema para NoSQL

El diseño de esquemas en bases de datos NoSQL depende mucho de las necesidades de la aplicación. Algunos patrones de diseño comunes incluyen:

  • Incrustaciones: Utilizadas cuando los datos están estrechamente relacionados y se consultan juntos con frecuencia.
  • Referencias: Utilizadas cuando los datos son grandes o se necesitan de forma independiente en diferentes partes de la aplicación.
  • Arreglos: MongoDB permite almacenar arreglos dentro de los documentos, lo que es útil para listas como etiquetas, elementos de un carrito de compras, o pedidos.

Ejemplo de Modelado para una Aplicación de Blog

Si estamos diseñando una aplicación de blog, podríamos tener dos colecciones: una para los autores y otra para los artículos. Los documentos de artículos podrían tener una referencia a los autores:

json
"Este documento representa un artículo con su título, contenido, el identificador del autor y una lista de etiquetas. El campo author_id referencia al autor en la colección de autores."

Buenas Prácticas en el Modelado de Datos NoSQL

Algunas de las mejores prácticas a seguir cuando modelamos datos en MongoDB incluyen:

  • Optimizar para las consultas: Diseña el esquema de manera que las consultas más comunes sean eficientes.
  • Evitar la normalización extrema: A diferencia de SQL, en NoSQL no es necesario normalizar excesivamente los datos. Las incrustaciones son preferibles cuando los datos están relacionados estrechamente.
  • Considerar el tamaño de los documentos: MongoDB tiene un límite de 16 MB por documento, por lo que es importante tener en cuenta este límite cuando se decidan las incrustaciones.

Resumen

En este capítulo, hemos aprendido cómo modelar datos en MongoDB utilizando colecciones y documentos. También exploramos las diferentes técnicas de modelado, como incrustaciones y referencias, y revisamos buenas prácticas para optimizar el diseño del esquema. En el próximo capítulo, profundizaremos en las operaciones de creación de datos en MongoDB y cómo insertar documentos en nuestras colecciones.


Pregúntame lo que sea