Introducción

1

Modelado de Datos en MongoDB para E-commerce

2

Modelado de Datos en MongoDB: Uso de JSON y Diagrama Entidad-Relación

3

Modelamiento de Datos: Metodología y Restricciones en Bases de Datos

Proyecto

4

Creación de Clúster y Bases de Datos en Mongo Atlas

5

Modelado de Workloads en Bases de Datos con MongoDB

6

Configuración de Entorno y Conexión a MongoDB con VSCode

Validación de datos

7

Validación de Datos en MongoDB: Mantén la Integridad de la Información

8

Validaciones de Datos: Numbers, Booleanos y Enums en JSON Schema

9

Validación de Arrays y Subdocumentos en Bases de Datos NoSQL

10

Validación de Passwords con Expresiones Regulares en MongoDB

11

Validación de Datos en MongoDB: JSON Schema y Actualizaciones

Relaciones

12

Relaciones en Bases de Datos NoSQL: Embebidas y Referenciales

13

Relaciones 1 a 1 embebidas en bases de datos: cuándo y cómo usarlas

14

Relaciones Uno a Uno Referenciadas en Bases de Datos Documentales

15

Relaciones Uno a Muchos: Embebidas y Referenciadas en Bases de Datos

16

Relaciones Uno a Muchos con Referencias en Bases de Datos

17

Relaciones Muchos a Muchos en Bases de Datos: Tiendas y Productos

18

Relaciones Muchos a Muchos en Bases de Datos Documentales

Bonus: patrones

19

Desnormalización en Bases de Datos Documentales: Optimización Avanzada

20

Aplicación del Computed Pattern en Bases de Datos MongoDB

21

Balance entre Simplicidad y Rendimiento en MongoDB

Próximos pasos

22

Modelado de Datos con MongoDB: Relaciones y Consultas Avanzadas

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Relaciones Uno a Muchos: Embebidas y Referenciadas en Bases de Datos

15/22
Recursos

¿Cómo se expresa una relación uno a muchos de forma embebida?

Explicar y gestionar las relaciones de datos es un pilar fundamental en el desarrollo de bases de datos efectivas, especialmente en un contexto de e-commerce. Un caso común es la relación uno a muchos, donde un usuario puede tener múltiples órdenes de compra. Este tipo de relación se puede expresar de manera embebida dentro de un documento, utilizando arrays para mantener varios elementos relacionados.

¿Qué significa tener datos embebidos?

Embebido significa almacenar información relacionada dentro del mismo documento, en este caso, utilizando un array. Esto se representa con corchetes cuadrados en diagramas de antiderrelación, indicando que el documento contendrá múltiples instancias de un cierto tipo.

Implementación en código

En la base de datos, este tipo de relación puede gestionarse fácilmente. Supongamos que estamos trabajando con órdenes de compra:

{
  userID: ObjectID(),
  date: "2023-11-05",
  items: [
    {
      product: "Camiseta",
      price: 120,
      quantity: 1
    },
    {
      product: "Pantalón",
      price: 200,
      quantity: 2
    }
  ]
}

En este ejemplo, cada orden de compra tiene un userID que lo liga a un usuario específico. Los productos comprados se almacenan dentro de un array llamado items, incluyendo el nombre, precio y cantidad de cada producto.

¿Cuáles son las ventajas de las relaciones embebidas?

  • Consultas rápidas: Como toda la información relevante está en un único documento, las consultas para obtener los detalles son más rápidas y sencillas.
  • Consistencia de datos: Todo lo necesario está en un solo lugar, minimizando riesgos de inconsistencia.
  • Eficiencia para datos consultados conjuntamente: Ideal para información que se consulta usualmente como un conjunto, como las portadas de un libro.

¿Cuándo es recomendable usar relaciones embebidas?

Si bien utilizar relaciones embebidas tiene muchas ventajas, hay circunstancias específicas donde esto es ideal:

  • Dependencias intrínsecas: Cuando la información es una parte integral del documento, como las portadas de un libro.
  • Relaciones uno a pocos: Cuando el volumen de datos está controlado y no se espera que crezca significativamente. Superar el límite del tamaño de un documento puede volverlo ineficiente.

No es recomendable para situaciones como comentarios de productos en un e-commerce, donde los volúmenes de datos pueden crecer indefinidamente.

Este enfoque no solo agiliza el acceso a la información, sino que también optimiza el manejo de datos que permanecen juntos de manera lógica. Sin embargo, es vital evaluar cuidadosamente cada caso para seleccionar el método de almacenamiento adecuado. Invito a los estudiantes a considerar este tipo de relación en proyectos futuros cuando sea aplicable, para mejorar tanto la eficiencia como la eficacia del manejo de sus datos en MongoDB.

Aportes 5

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Apuntes

Relaciones 1 a Muchos embebidas

La relacion embebida 1 a muchos embebida es tener una lista (arreglo) de sub-documentos de una coleccion. El documento puede tener varios sub-documentos de una coleccion y esos sub-documentos dependen del documento padre y solo tienen ese.

Casos de uso

  • Cuando la informacion es consultada en conjunto
  • El arreglo de subdocumentos no peligre el limite de 16MB
  • Cuando los sub-documentos son una dependencia
  • Cuando los dub-docs son 1:few (1 a pocos)

Ejemplo

En la siguiente imagen se puede ver la coleccion de ordenes que tienen una relacion embebida 1-N de productos. La representacion ER es agregar al final del nombre de la coleccion del sub-documento corchetes (Product []).

<h5>Insertar</h5>
db.orders.insertOne({
    user_id: ObjectId('64966222a80142b1ef0dbb5a'), // referencia a un ObjectID de un usuario
    date: "2020-12-12",
    items: [
        {
            name: 'Camiseta',
            price: 12000,
            qty: 1
        },
        {
            name: 'Pantalon',
            price: 16000,
            qty: 2
        },
    ]
})
<h5>Consultar</h5>
// buscar el id de un usuario
db.users.find()

// ver las ordenes de compra
db.orders.find()

// Buscar algo en concreto de las ordenes
db.orders.find({
  "items.qty": 2
})

Embeber REVIEWS o COMENTARIOS de cierto producto es un ejemplo de dónde NO usar este método, porque puede crecer demasiado y reducir el rendimiento de la consulta o exceder los 16 mb de limite.

Un aporte por si no les funciona “items.qty”, en la docoumentación de mongodb https://www.mongodb.com/docs/manual/reference/method/db.collection.find/ , encontramos la propiedad “size” que nos ayuda a filrar arreglos según su tamaño, para este ejemplo sería algo como:

filtrar ordenes con 2 items…

 db.orders.find( {items: {$size: 2}} )

Hubiera sido super bueno que estas clases tuvieran los conceptos por separado… es decir, la parte de relaciones trabajar ya con bases de datos que supuestamente íbamos a usar en weather, y no trabajar sobre crear datos y luego forzar a hacer match con consultas

Yo lo entiendo como que las relaciones 1-N embebidas son relaciones estaticas, por lo mismo de que son caracteriscas propias del elemento principal, mientras que las relaciones 1-N referenciadas son relaciones dinamicas, cambian en el tiempo, como los reviews o comentarios, que pueden aumentar considerablemente.