Examinei toda a lista de sites e acho que esta é a melhor correspondência. Não se trata realmente de administração de banco de dados, mas sim de design de banco de dados. Por favor, desculpe-me e me aponte para o site correto.
Estou projetando um banco de dados para um sistema de BI rudimentar. Neste momento, bati em uma parede, que é esta (explicando usando dados fictícios):
Suponha que minha tabela de fatos contenha esta informação:
John Doe flew from LAX to ATL on 1 Nov in flight AB-123
As dimensões e seus atributos são:
- Folheto - nome, clube
- Aeroporto - cidade, código
- Data - ano, mês, data
- Voo - código, padrão, atraso, preço
Agora, a partir disso, posso gerar facilmente um relatório como este:
Airport --> LAX DFW ORD ATL Total
Gold 50 40 10 25 125
Silver 240 300 95 140 775
Bronze 1000 1500 800 1800 5100
Total 1290 1840 905 1965 6000
Usando uma consulta como:
select fd.club, ad.code, count(f1.id) from flyer fd, airport ad, fact1 f1
where fd.id = f1.fid and ad.id = f1.aid and month(f1.date) = 10
group by f1.club, ad.code;
Mas meu problema vem do fato de que o status de "clube" de um aviador é um alvo em movimento. Um aviador que está em Ouro hoje poderia estar em Prata em outubro, então estou contando com ele no grupo incorreto aqui. Assim, imagino que preciso de uma tabela de fatos separada como esta:
John Doe entered Bronze club on 8/15
John Doe entered Silver club on 10/20
...
"Clube" é descartado como um atributo da dimensão original do flyer. Em vez disso, surge uma nova dimensão de clube.
E então, para gerar o relatório de que preciso, uno essas duas tabelas de fatos.
Estou no caminho certo? Ou existe uma solução alternativa e mais simples para isso? Uma alternativa que eu poderia pensar é incluir o clube na tabela de fatos original, lidando com isso durante o processo ETL. Então o fato se torna:
John Doe of Silver Club flew from LAX to ATL on 1 Nov in flight AB-123
Por favor, deixe-me saber qual abordagem é melhor ou se existe uma terceira.