Relaciones Muchos a Muchos en Bases de Datos Documentales
Clase 18 de 22 • Curso de Modelado de Datos en MongoDB
Resumen
¿Cómo manejar relaciones muchos a muchos con referencias autoreferenciadas?
Las relaciones muchos a muchos son esenciales para modelar sistemas complejos en bases de datos, pero también pueden ser un desafío. En esta sesión, exploramos cómo crear una relación muchos a muchos entre tiendas y productos, permitiendo que ambos elementos refieran de manera cruzada.
¿Cómo actualizamos un producto para incluir referencias a tiendas?
Para tener una relación que permita saber en qué tiendas se encuentra un producto específico, primero debemos actualizar el producto con los IDs de las tiendas correspondientes. Para ello, podemos seguir estos pasos:
-
Identificar el producto y la tienda:
- Realiza una consulta para obtener el ID del producto que deseas actualizar.
- Realiza otra consulta para identificar qué tienda quieres vincular con el producto.
-
Realizar la actualización en la base de datos:
- Crea un nuevo script para realizar un
Update
en lugar de unInsert
. - Especifica la base de datos y realiza un
updateOne
sobre el producto en cuestión.
db.productos.updateOne( { _id: ObjectId("ID_del_producto") }, { $set: { StoreIDs: ["ID_de_la_tienda"] } } )
- Crea un nuevo script para realizar un
Al ejecutar el script, la base de datos actualizará el documento del producto añadiendo un campo StoreIDs
, que contendrá una lista de las tiendas asociadas.
¿Cómo verificamos las referencias entre productos y tiendas?
Una vez actualizado el producto, es crucial verificar que las relaciones están correctamente implementadas:
-
Consulta el producto para verificar las referencias:
- Realiza una consulta para comprobar si el producto tiene el campo
StoreIDs
con los IDs de las tiendas asociadas.
db.productos.findOne( { _id: ObjectId("ID_del_producto") } )
- Realiza una consulta para comprobar si el producto tiene el campo
-
Garantiza que las relaciones puedan consultarse desde ambas direcciones:
- Asegúrate de que los Stores también puedan relacionarse con los productos.
- Permite resolver las relaciones desde la colección
Stores
, así como desde la colecciónProductos
.
db.productos.aggregate([ { $lookup: { from: "stores", localField: "StoreIDs", foreignField: "_id", as: "DetalleStores" } } ])
¿Cuándo deberías usar referencias autoreferenciadas?
Las autoreferencias son útiles cuando se necesita acceder a la información desde cualquiera de los dos lados de la relación. Es clave decidir si la información debe estar referenciada desde ambos lados o solamente desde uno con base en la experiencia del usuario o las necesidades del negocio.
-
Referencias bidireccionales: Son recomendables cuando la información se consume de manera frecuente y conjunta desde distintos puntos de la aplicación (por ejemplo, un sistema de conferencias donde es necesario conocer tanto las sesiones de un speaker como los speakers de una sesión).
-
Referencias unilaterales: Son suficientes cuando la mayoría de las consultas o acciones se centran en uno de los lados de la relación.
Adoptar la estrategia adecuada para implementar autoreferencias en bases de datos contribuye significativamente a la eficiencia de la aplicación y evita redundancias innecesarias.