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

Clase 19 de 22Curso de Modelado de Datos en MongoDB

Resumen

¿Qué es la desnormalización en bases de datos documentales?

La desnormalización es un concepto clave en la optimización de bases de datos documentales, especialmente si vienes de un entorno de bases de datos relacionales como Postgres o MySQL. A diferencia de la normalización de datos, que busca evitar la redundancia, la desnormalización agrega datos redundantes para mejorar el rendimiento. Este proceso, aunque va contra las prácticas tradicionales de evitar la duplicidad en bases de datos relacionales, es un aliado en contextos donde las consultas rápidas y eficientes son necesarias.

¿Cómo aplicar la desnormalización en un e-commerce?

En el ejemplo de un e-commerce que maneja órdenes de compra, ya se tiene un sub-arreglo de ítems con todos los productos. En lugar de solo referenciar los productos por su ID, podemos desnormalizar nuestra base de datos repitiendo valores clave directamente en las órdenes de compra.

  • Vector de ítems: Se crea un array llamado items donde se incluye la cantidad de producto, el título y el precio. Aunque estos datos ya existen en la colección de productos, su duplicación evita la necesidad de consultas adicionales para obtenerlos.
  • Referencia adicional: Aunque hay datos redundantes, se mantiene una referencia hacia el producto original para obtener más información si es necesario.

Esta estrategia permite optimizar procesos como la generación de facturas, ya que la información requerida está fácilmente accesible sin realizar múltiples consultas.

Ventajas de la desnormalización

  1. Optimización de consultas: Al tener datos redundantes, se reducen las consultas necesitando menos operaciones para obtener información sobre productos específicos.
  2. Información histórica: Guarda el precio y detalle del producto al momento de la compra, lo que es útil si posteriormente los precios cambian por inflación u otros factores.

Implementación práctica en código

Altamente útil en el contexto de un servidor o web service:

// Ejemplo de implementación de desnormalización en una orden de compra
const order = {
  items: [
    {
      productId: "12345",
      title: "Product 1",
      price: 12,
      quantity: 2
    },
    {
      productId: "67890",
      title: "Product 2",
      price: 45,
      quantity: 1
    }
  ],
  userId: "user123"
};

En este código, se incluye la información esencial del producto en la orden, evitando consultas para generar una factura completa o visualizar el historial de compras.

¿Cómo afectará la desnormalización a la estructura de tu base de datos?

Al implementar la desnormalización, tu rol se centra en administrar coherentemente el modelo de datos. No se trata solo de insertar valores a mano, sino de automatizar el proceso a través de aplicaciones o servicios web que procesen y almacenen datos eficientemente con las reglas de negocio adecuadas.

Puedes verificar y visualizar documentos en tu base de datos usando técnicas como find en entornos de MongoDB:

db.orders.find({ _id: "orderId" });

Esta consulta muestra cómo quedó estructurada la orden, permitiéndote verificar que la desnormalización se ha implementado correctamente. Además, aumenta la eficiencia al evitar un aggregate para buscar información que ya está disponible.

Con este enfoque, se logra un equilibrio entre la eficiencia de consultas y la integridad de datos, lo cual es crucial para el éxito en la gestión de datos en un entorno de bases de datos documentales. Aprovecha lo aprendido para seguir explorando patrones avanzados como el "computed pattern" que también mejorará la funcionalidad de tus aplicaciones. ¡La práctica constante perfeccionará tu dominio en la administración de bases de datos documentales!