Tabelas fato e tabelas dimensionais – fundamentos de DW - Diego Macêdo
Tabelas fato e tabelas dimensionais – fundamentos de DW
"Modelagem dimensional é uma disciplina de design que transpassa a modelagem relacional e a realidade de dados de texto e números" (Kimball)
Se comparado com a modelagem entidade/relacionamento, ou simplesmente modelagem relacional, a modelagem dimensional é menos "rigorosa" (permitido ao modelador mais critérios próprios na organização de tabelas). Porém é mais prático para acomodar grandes volumes de dados para consulta, e tem uma melhor performance. Em contraste com outras disciplinas de modelagem, a modelagem dimensional desenvolveu um extensivo portfólio de tecnicas para tratar situações reais.
Mensurações e contexto geral
A modelagem dimensional pode começar pela divisão em duas partes: mensuração e contexto.
Mensurações são normalmente numéricas e repetidas. Mensurações numéricas são FATOS. Fatos são normalmente cercados por um grande contexto textual (dimensões). Fatos são muito específicas, tem atributos numéricos muito bem definidos. Em contraste, o contexto textual que cerca as tabelas fatos é mais aberto. Não é raro para o modelador adicionar contextos (dimensões) para um set de fatos durante o trabalho de implementação.
Embora o modelador possa amarrar todo o contexto dentro de uma grande lógica associada com cada fato, ele normalmente achará mais conveniente (e intuitivo) dividir o contexto em grupos independentes. Quando você grava fatos (ex.: vendas de um determinado produto em um mês), você natualmente divide o contexto em grupos: produtos, loja, tempo, cliente, caixa e diversos outros. Nós chamamos essa divisão de grupos de dimensões e assumimos informalmente que essas dimensões são independentes, ligadas a um fato (no nosso exemplo, fato VENDA). A figura abaixo dá um exemplo grosseiro de modelo dimensional para um fato venda.
Na verdade, dimensões raramente são absolutamente independentes num forte senso estatístico. No exemplo acima, cliente e loja têm uma forte correlação estatística. É a decisão certa modelar CLIENTE e LOJA como dimensões separadas. simples dimensões combinadas poderiam ter 10 milhões de linhas, e o registo de um dado cliente em uma dada loja poderia ser representado mais natualmente numa tabela fato que também representasse a dimensão TEMPO.
A abordagem de dimensões independentes poderia significar que todas as dimensões, como por exemplo PRODUTO e CLIENTE são independentes do fato TEMPO. Porém você deve considerar as mudanças esporádicas dessas dimensões à medida que são manipuladas. Administradores de DW devem ficar atentos para representar essas mudanças. Esta situação é aderessada pela técnica de mudanças lentas de dimensões, que postarei posteriormente nesse blog.
Chaves dimensionais
Voltando ao nosso exemplo, sabendo que diversos clientes compram diversos produtos em diversas lojas, em diversos tempos diferentes, o modelador logicamente modelará uma tabela fato com diversas FK´s referenciando entidades do contexto (tabelas dimensão). E entidades do contexto são cada dimensão com uma simples chave primária, embora você possa separar o desenho lógico do desenho físico, num banco dimensional tabelas fato e dimensão são tabelas explícitas.
De fato numa modelagem relacional o banco tem dois níveis de design físico. No nível mais alto, as tabelas são representadas apenas com campos e chaves. No nível mais baixo, elas são representadas com a organização de bits, alocação de disco e memória etc… esse design já é mais dependente de um particular SGBD (como Oracle ou SQL Server). Num contexto dimensional, uma tabela fato em um puro star schema consiste de várias FK´s, cada uma referenciando uma tabela dimensão. Na figura 1 as chaves na tabela fato são nomeadas FK, e as chaves primárias nas dimensões são Pk´s.