Bancos de dados normalizados e desnormalizados

Projeto de banco de dados

Lis Sulmont

Curriculum Manager

De volta ao nosso exemplo da livraria

Desnormalizado: esquema em estrela

Normalizado: esquema Snowflake

Projeto de banco de dados

Consulta desnormalizada

Objetivo: descobrir quantos livros da Octavia E. Butler foram vendidos em Vancouver no quarto 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;

DNT_CURLY_TAG_1

7600

DNT_CURLY_TAG_1

Total de 3 junções

Projeto de banco de dados

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
Projeto de banco de dados

Consulta normalizada (continuação)

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 junções

Então, por que você quer normalizar um banco de dados?

Projeto de banco de dados

A normalização economiza espaço

Os bancos de dados desnormalizados permitem a redundância de dados.

Projeto de banco de dados

A normalização economiza espaço

A normalização acaba com a repetição de dados

Projeto de banco de dados

A normalização garante uma melhor integridade dos dados.

$$

1. Garantir a consistência dos dados

Tem que seguir as regras de nomenclatura por causa da integridade referencial, tipo, “Califórnia”, não “CA” ou “califórnia”.

2. Atualização, remoção e inserção mais seguras

Menos redundância de dados = menos registros para alterar

3. Mais fácil de reformular com extensões

Tabelas menores são mais fáceis de estender do que tabelas maiores.

Projeto de banco de dados

Normalização de banco de dados

Vantagens

  • A normalização elimina a redundância de dados: economize em armazenamento

  • Melhor integridade dos dados: dados precisos e consistentes

Desvantagens

  • Consultas complexas exigem mais CPU
Projeto de banco de dados

Lembra-se de OLTP e OLAP?

OLTP

Por exemplo, bancos de dados operacionais.

Normalmente altamente normalizado

  • Intensivo em escrita
  • Priorize uma inserção de dados mais rápida e segura

OLAP

Por exemplo, armazéns de dados

Normalmente menos normalizado

  • Intensivo em leitura
  • Priorize consultas mais rápidas para análises
Projeto de banco de dados

Vamos praticar!

Projeto de banco de dados

Preparing Video For Download...