Relaciones Uno a Uno Referenciadas en Bases de Datos Documentales
Clase 14 de 22 • Curso de Modelado de Datos en MongoDB
Contenido del curso
Proyecto
Validación de datos
- 7

Validación de Datos en MongoDB: Mantén la Integridad de la Información
16:08 min - 8

Validaciones de Datos: Numbers, Booleanos y Enums en JSON Schema
07:49 min - 9

Validación de Arrays y Subdocumentos en Bases de Datos NoSQL
11:54 min - 10

Validación de Passwords con Expresiones Regulares en MongoDB
08:57 min - 11

Validación de Datos en MongoDB: JSON Schema y Actualizaciones
12:04 min
Relaciones
- 12

Relaciones en Bases de Datos NoSQL: Embebidas y Referenciales
10:29 min - 13

Relaciones 1 a 1 embebidas en bases de datos: cuándo y cómo usarlas
10:09 min - 14

Relaciones Uno a Uno Referenciadas en Bases de Datos Documentales
Viendo ahora - 15

Relaciones Uno a Muchos: Embebidas y Referenciadas en Bases de Datos
10:46 min - 16

Relaciones Uno a Muchos con Referencias en Bases de Datos
15:19 min - 17

Relaciones Muchos a Muchos en Bases de Datos: Tiendas y Productos
14:31 min - 18

Relaciones Muchos a Muchos en Bases de Datos Documentales
07:04 min
Bonus: patrones
Próximos pasos
En la era digital actual, comprender cómo manejar eficientemente las bases de datos documentales es esencial para garantizar el rendimiento y la escalabilidad de las aplicaciones. Uno de los aspectos clave es la gestión de las relaciones entre documentos, en particular la relación uno a uno. Aquí te presento una guía para entender mejor cómo y cuándo aplicar relaciones uno a uno de forma referenciada en bases de datos documentales.
¿Qué es una relación uno a uno y cómo se implementa de forma embebida?
Una relación uno a uno en bases de datos se da cuando un documento está relacionado con otro documento de manera exclusiva. Tradicionalmente, esto se maneja embebiendo la información del segundo documento directamente dentro del primero. Este método es muy eficiente y es recomendado como mejor práctica en la mayoría de los casos, especialmente cuando tratamos con bases de datos documentales, donde el rendimiento de lectura es prioritario.
¿Cuándo es preferible una relación uno a uno referenciada?
Aunque la embebida es la forma estándar, existen situaciones en las que una relación uno a uno referenciada es más adecuada:
- Superación de restricciones de peso de documento: Cuando un documento alcanza o se acerca al límite de tamaño establecido por el sistema de gestión de base de datos (por ejemplo, 16MB en MongoDB).
- Desempeño y tiempo de consulta: Al crecer el documento con información embebida, las consultas pueden volverse lentas. Separando la información en documentos diferentes se mejora la velocidad de acceso.
Ejemplo práctico: una tienda y sus detalles
Tomemos el caso de una tienda que necesita almacenar información básica, como el nombre y la ubicación, y detalles más específicos como descripciones o datos del gerente. En este caso, podríamos tener dos colecciones: stores para información básica y store_details para los detalles extendidos, conectados a través de un store_id común.
¿Cómo conectar las colecciones con relaciones referenciadas?
Para conectar documentos de diferentes colecciones mediante una relación uno a uno referenciada, se utiliza un identificador común que sirve como referencia entre ellos. Veamos cómo hacerlo:
Creando las colecciones y documentos
-
Insertar documentación básica de la tienda:
{ "store_id": "ST001", "name": "Nico Store Program", "address": "Cargo 87" } -
Insertar detalles de la tienda:
{ "store_id": "ST001", "description": "Texto, texto, texto", "manager": { "email": "nico@email.com", "phone": "3111234567" } }
Cuando ambos documentos comparten el mismo store_id, ahora están conectados referencialmente, pero no físicamente. Para realizar consultas que junten esta información es necesario utilizar técnicas especiales como el Aggregation Framework.
¿Cómo se realiza una consulta combinada con el Aggregation Framework?
El Aggregation Framework de MongoDB permite realizar operaciones complejas sobre los datos, como combinar documentos de distintas colecciones. El operador $lookup es especialmente útil aquí ya que permite "unir" documentos de manera similar a cómo se haría en bases de datos relacionales.
db.stores.aggregate([ { $lookup: { from: "store_details", localField: "store_id", foreignField: "store_id", as: "detail" } } ])
Esta consulta devuelve un documento que contiene tanto la información básica de la tienda como sus detalles, todo en una única respuesta.
Manejar relaciones uno a uno de forma referenciada puede ser un poco más complejo y requerir más consultas, pero es una solución necesaria cuando se trata de optimizar el rendimiento y evitar superar limitaciones de tamaño. Recuerda que cada caso es único y debe ser evaluado para determinar la mejor estrategia de modelado de datos. ¡Continúa explorando y aplicando estos conocimientos para destacar en el mundo del manejo de bases de datos!