Saltar la navegación

Relación Muchos a Muchos

Se debe evitar mantener en el DW tablas de Dimensiones con relaciones muchos a muchos entre ellas, ya que esta situación puede, entre otros inconvenientes, provocar la pérdida de la capacidad analítica de la información y conducir a una agregación incorrecta de los datos.

Para explicar esta problemática, se tomará como ejemplo la relación existente entre ríos y provincias, es decir:

  • Una provincia tiene uno o más ríos, y un río pertenece a una o más provincias.

Se tomará como referencia las siguientes tablas que contienen datos relacionados a ríos y provincias:



Cuando existe este tipo de relación (muchos a muchos) entre dos o más tablas, se pueden realizar diferentes acciones para abordar esta situación. Una posible solución, sería llevar a cabo los siguientes pasos:

  • 1) Crear una tabla de Dimensión por cada entidad que pertenece a la relación. Cada una de estas tablas NO debe incluir ninguna correspondencia con las demás. En este caso se crearán dos tablas de Dimensiones, dimRios (correspondiente a la entidad rios) y dimProvincias (correspondiente a la entidad provincias).
  • 2) Crear otra tabla de Dimensión (en este caso dimRiosProvincias) que sea hija de las tablas de Dimensiones recientemente confeccionadas (en este caso dimRios y dimProvincias), que estará compuesta de los siguientes campos:
    • Clave principal: dato autoincrementable (en este caso idRioProvincia).
    • Claves foráneas: se deben añadir columnas que referencien la clave principal de las tablas de Dimensiones involucradas. En este caso idRio e idProvincia.
    • Otros campos de información adicional.
  • 3) Incluir el campo clave principal creado en el paso anterior (idRioProvincia) en la tabla de Hechos.

El resultado sería el siguiente:

Otra posible solución sería agregar las dos claves primarias de las tablas de Dimensiones dimRios y dimProvincias en la tabla de Hechos.

Existen otras soluciones para solventar esta brecha, pero la primera propuesta posee mucha performance, ya que:

  • elimina la relación muchos a muchos,
  • solo se necesita un campo clave en la tabla de Hechos, y
  • las relaciones entre las tablas resultantes es simple y fácil de visualizar.

La única desventaja es en cuanto a los procesos ETL, ya que se aumenta su complejidad y tiempo de proceso.