Wiki Arquitetura e modelagem
Modelagem dimensional (star schema)
Fatos (o que aconteceu, com números) no centro; dimensões (quem, o quê, quando, onde) em volta. É o formato que BI lê melhor.
O modelo estrela tem uma tabela fato no centro e tabelas dimensão ao redor.
- Fato: um evento de negócio por linha, no grão definido (aqui, um item de pedido), com medidas numéricas (quantidade, valor) e chaves para as dimensões.
- Dimensão: descreve o contexto (cliente, produto, data), com atributos para filtrar e agrupar.
A primeira decisão é o grão: o que exatamente é uma linha da fato. Misturar grãos na mesma fato (item e pedido inteiro) é o que faz número dobrar.
Uma estrela pequena, que roda aqui
A fato tem grão de item. A pergunta "quanto vendeu cada categoria, por segmento de cliente" vira dois JOINs e um GROUP BY.
CREATE VIEW fato_itens AS
SELECT i.pedido_id, p.data, p.cliente_id, i.produto_id, i.qtd, i.qtd * pr.preco AS receita
FROM itens i
JOIN pedidos p ON p.id = i.pedido_id
JOIN produtos pr ON pr.id = i.produto_id
WHERE p.status = 'entregue';
SELECT pr.categoria, c.segmento, SUM(f.receita) AS receita
FROM fato_itens f
JOIN produtos pr ON pr.id = f.produto_id
JOIN clientes c ON c.id = f.cliente_id
GROUP BY pr.categoria, c.segmento
ORDER BY receita DESC;Saída
categoria | segmento | receita ----------- | -------- | ------- telas | atacado | 1800 telas | varejo | 900 periféricos | varejo | 380 periféricos | atacado | 300 acessórios | varejo | 60
O pedido 109, de um cliente que não existe na dimensão, sumiu do resultado no JOIN com clientes. Num modelo de verdade, a dimensão ganha uma linha "desconhecido" (chave -1) para a fato não perder venda.
Estrela ou floco de neve
No *snowflake*, a dimensão é normalizada em várias tabelas (produto → categoria → departamento). Economiza repetição, mas custa JOINs em toda consulta. Para BI (Power BI incluso), a recomendação é a estrela: dimensões largas e desnormalizadas.
- Chave substituta (*surrogate key*), um inteiro gerado no warehouse, isola a fato das mudanças de chave da origem e permite histórico de dimensão (veja SCD).
- Dimensão de data própria (uma linha por dia, com mês, trimestre, feriado) é quase sempre a primeira a ser construída.
Fontes
Conhecimento compartilhado pela Genesis Innovation.