Siempre que sea posible, 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 sumarizació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.
Además, se tomará como referencia las siguientes tablas pertenecientes a un OLTP, que contienen básicamente los datos relacionados a ríos y provincias:
Figura 6.6: Tabla ”RIOS”. |
Figura 6.7: Tabla ”PROVINCIAS”. |
Cuando existe este tipo de relación (muchos a muchos) entre dos o más tablas, se pueden realizar diferentes acciones para solventar esta situación. Una posible solución, sería llevar a cabo los siguientes pasos:
-
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 a las demás. En este caso se crearán dos tablas de dimensiones, DIM_RIOS (correspondiente a la entidad “RIOS”) y DIM_PROV (correspondiente a la entidad “PROVINCIAS”).
-
Crear otra tabla de dimensión (en este caso DIM_RELACION), que sea hija de las tablas de dimensiones recientemente confeccionadas (en este caso DIM_RIOS y DIM_PROV), que estará compuesta de los siguientes campos:
-
Clave principal: dato autonumérico o autoincrementable (en este caso “id_dim_Relacion”).
-
Claves foráneas: se deben añadir cada una de las columnas que representan la clave principal de las tablas de dimensiones en cuestión (en este caso “id_dim_Rio” y “id_dim_Prov”).
-
Otros campos de información adicional.
-
-
Incluir el campo clave principal creado en el paso anterior (en este caso “id_dim_Relacion”) en la tabla de Hechos.
Gráficamente, el resultado sería el siguiente:
Figura 6.8: Posible solución al modelado de la relación muchos a muchos. |
Otra posible solución sería agregar las dos claves primarias de las tablas de dimensiones DIM_RIOS y DIM_PROV 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.
-
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.