Bases de datos normalizadas y desnormalizadas

Diseño de bases de datos

Lis Sulmont

Curriculum Manager

Volvamos con el ejemplo de la librería.

Desnormalizado: esquema en estrella

$$

Normalizado: esquema en copo de nieve

$$

Diseño de bases de datos

Consulta desnormalizada

Objetivo: obtener la cantidad de todos los libros de Octavia E. Butler vendidos en Vancouver en el 4.º trimestre de 2018.

  SELECT SUM(quantity) FROM fact_booksales
    -- Join to get city
    INNER JOIN dim_store_star on fact_booksales.store_id = dim_store_star.store_id
    -- Join to get author
    INNER JOIN dim_book_star on fact_booksales.book_id = dim_book_star.book_id
    -- Join to get year and quarter
    INNER JOIN dim_time_star on fact_booksales.time_id = dim_time_star.time_id
  WHERE 
    dim_store_star.city = 'Vancouver' AND dim_book_star.author = 'Octavia E. Butler' AND
    dim_time_star.year = 2018 AND dim_time_star.quarter = 4;
7600

Total de 3 uniones

Diseño de bases de datos

Consulta normalizada

SELECT
  SUM(fact_booksales.quantity)
FROM
  fact_booksales
  -- Join to get city
  INNER JOIN dim_store_sf ON fact_booksales.store_id = dim_store_sf.store_id
  INNER JOIN dim_city_sf ON dim_store_sf.city_id = dim_city_sf.city_id
  -- Join to get author
  INNER JOIN dim_book_sf ON fact_booksales.book_id = dim_book_sf.book_id
  INNER JOIN dim_author_sf ON dim_book_sf.author_id = dim_author_sf.author_id
  -- Join to get year and quarter
  INNER JOIN dim_time_sf ON fact_booksales.time_id = dim_time_sf.time_id
  INNER JOIN dim_month_sf ON dim_time_sf.month_id = dim_month_sf.month_id
  INNER JOIN dim_quarter_sf ON dim_month_sf.quarter_id =  dim_quarter_sf.quarter_id
  INNER JOIN dim_year_sf ON dim_quarter_sf.year_id = dim_year_sf.year_id
Diseño de bases de datos

Consulta normalizada (continuación)

WHERE
  dim_city_sf.city = `Vancouver`
  AND 
  dim_author_sf.author = `Octavia E. Butler`
  AND
  dim_year_sf.year = 2018 AND dim_quarter_sf.quarter = 4; 
sum
7600

Total de 8 uniones

Entonces, ¿por qué querríamos normalizar una base de datos?

Diseño de bases de datos

La normalización ahorra espacio.

Las bases de datos desnormalizadas permiten la redundancia de datos.

Diseño de bases de datos

La normalización ahorra espacio.

La normalización elimina la redundancia de datos.

Diseño de bases de datos

La normalización garantiza una mayor integridad de los datos.

$$

1. Refuerza la coherencia de los datos.

Es fundamental respetar las convenciones de nomenclatura por la integridad referencial; por ejemplo, «California», no «CA» ni «california».

2. Actualización, eliminación e inserción más seguras

Menos redundancia de datos = menos registros que modificar

3. Más fácil de rediseñar con la ampliación

Las tablas más pequeñas son más fáciles de extender que las tablas más grandes.

Diseño de bases de datos

Normalización de bases de datos

Ventajas

  • La normalización elimina la redundancia de datos: ahorro en almacenamiento.

  • Mayor integridad de los datos: datos precisos y coherentes.

Desventajas

  • Las consultas complejas requieren más CPU.
Diseño de bases de datos

¿Recuerdas OLTP y OLAP?

OLTP

Por ejemplo, bases de datos operativas.

Normalmente muy normalizado

  • Mayor volumen de escritura
  • Prioriza una introducción de datos más rápida y segura.

OLAP

Por ejemplo, almacenes de datos.

Normalmente menos normalizado

  • Mayor volumen de lectura
  • Prioriza las consultas más rápidas para el análisis
Diseño de bases de datos

¡Vamos a practicar!

Diseño de bases de datos

Preparing Video For Download...