Consultas modelo estrela (star schema)

Boa tarde pessoal, tudo bem?

Gostaria de colocar o tópico em discussão para saber a opinião de vocês de como seria a melhor forma para montar no Scriptcase uma esquema de extração de relatórios do banco de dados no formato de modelagem FATO-DIMENSÃO (star schema).

Bom,
Tem muita gente aqui que não sabe o que é FATO-DIMENSÃO ou modelo estrela (star schema).
Podemos começar definindo isto:

Fonte wikipedia: https://pt.wikipedia.org/wiki/Esquema_estrela

O conceito de Esquema Estrela (em inglês: Star Schema) foi criado pelo estadunidense Dr. Ralph Kimball, ao propor uma visão para a modelagem de base de dados para sistemas de apoio a decisão. Sua principal característica é a presença de dados altamente redundantes, melhorando o desempenho.

O Star schema ou esquema em estrela é uma metodologia de modelagem de dados utilizada do desenho de um Data warehouse.

Os dados são modelados em tabelas dimensionais ligadas a uma tabela de fatos. As tabelas dimensionais contêm as características de um evento. A tabela de fatos armazena os fatos ocorridos e as chave para as características correspondentes, nas tabelas dimensionais.

O nome foi adotado devido a semelhança do modelo como uma estrela. No “centro” da estrela, existe a o que chamou tabela de fatos, rodeada por tabelas auxiliares, chamadas de dimensões.

A tabela de fato conecta-se as demais dimensões por múltiplas junções e as tabelas de dimensões conectam-se com apenas uma junção a tabela de fatos.

Desta forma a consulta ocorre inicialmente nas tabelas de dimensão e depois nas tabelas de fatos, assegurando a precisão dos dados por meio de uma estrutura de chaves onde não é preciso percorrer todas as tabelas, garantindo um acesso mais eficiente de com melhor desempenho.

Propriedades do esquema em estrela

Uma única tabela de fatos contendo dados, sem redundância
Uma tabela por dimensão
As chaves primárias, da tabela de fatos, são apenas de uma por dimensão.
Cada chave é gerada (eficiência)
Cada dimensão representa um única tabela, altamente desnormalizada.

Vantagens

Fácil de perceber, reduz o número de joins e tem baixa manutenção.

Desvantagens

Não fornece explicitamente suporte para hierarquias de atributos e as tabelas dimensionais são um problema.

As tabelas de dimensão, por não estarem normalizadas, contém repetição das informações. Não são adequadas para uso transacional pois uma alteração simples (como de o nome de um país) poderia gerar a necessidade de várias alterações no banco de dados (para todas as linhas de municípios).

extras
https://canaltech.com.br/business-intelligence/dimensoes-e-fatos-no-contexto-do-business-intelligence-bi-18710/
https://www.binapratica.com.br/pentaho-pratica
https://rafaelpiton.com.br/data-warehouse-star-schema/
http://datawarehouse4u.info/Data-warehouse-schema-architecture-star-schema.html
http://www.vertabelo.com/blog/technical-articles/data-warehouse-modeling-the-star-schema
http://201.73.237.150/help11/portuguese/sigadw_modelagem_dimensional.htm

PDF

http://www.uniriotec.br/~tanaka/TIN0036/10-BDDDW-Mod-Dimens-Basicol.pdf
http://gbd.dc.ufscar.br/download/files/courses/DataAnalyticalProcessing_2010/SCC0245_04projeto.pdf
https://www.dcc.fc.up.pt/~pbrandao/aulas/0203/bdm/pdfs/DataWarehousing.pdf

Nariga acho que para encontrar “melhor forma para montar no Scriptcase uma esquema de extração de relatórios do banco de dados no formato de modelagem FATO-DIMENSÃO (star schema)”, não será melhor pegar um caso exemplo, com tabelas e alguns dados para preenchê-las onde todos possam trabalhar e mostrar suas opiniões?

Bem, eu já usei este modelo, mas não com o SC (o que eu gostaria muito) mas como no final você deve usar este modelo para demonstração em gráficos para BI, o SC ainda não dispõe de recursos para fazer, por exemplo, gráficos interligados em um único dashboard, sem ter que usá-los em containeres separados.
Se for somente para relatórios, não vejo muitas vantagens, nem mesmo para um sistema baseado neste modelo.

Opa Alexandre, obrigado pela resposta e desculpe pela minha imprecisão.

Vamos aos fatos e dimensões:
Tabelas Fato:

  1. Questionários respondidos por pacientes
  2. Medicamentos prescritos aos pacientes
  3. Tipos de Tratamentos por paciente

Tabelas Dimensão: paciente, medicamentos, tipo de tratamento e tempo (todas as fatos tem a dimensão tempo).

A ideia para usar o star schema é justamente para deixar mais fácil a extração dos questionários responsidos pelos médicos pesquisadores, mas principalmente porquê preciso relacionar os fatos na dimensão tempo.

Opa Kleyber,

A ideia é somente para gerar relatórios, mas por se tratar de pesquisas, entendo que usar o modelo estrela ajudará os pesquisadores a extrair os dados de forma mais eficiente. Não?

Kleyber,

Qual seria sua sugestão, fazer um tabelão jeio de joins entre fatos e dimensões e utiliza filtros?

Não sei se seria o melhor.
Pode ficar pesado se houverem muitos dados.

Bem, eu prefiro fazer uma análise de acordo com a necessidade do cliente. Daí faço todo o MER baseado nisto e defino tudo. u seja, depende totalmente do que o cliente efetivamente necessita.

A ideia de fazer o esquema estrela era justamente não ficar muito pesado. E a princípio acredito que seria mais fácil para meus clientes (visto que não tem muito conhecimento sobre sistemas).

Optando por fazer algo parecido com star schema, qual a sugestão para operacionalizar esse relatório de extração no Scriptcase?

Alguma sugestão?

Afinal, você quer fazer um BI para o cliente, é isso? Se for isso, o modelo STAR pode atender sim, dependendo de como você vai pegar as informações no banco de dados do cliente. É necessário ter um entendimento real de ETL e como vão ficar armazenadas (ou não) essas informações.

Não quero fazer um BI…

Apenas gerar relatórios dos questionários selecionados de acordo com as dimensões (que podem ser utilizadas apenas algumas, por exemplo, o pesquisador quer fazer uma análise só daqueles pacientes que tomaram tal remédio, ou quer fazer uma análise daqueles pacientes que tem entre x e y anos de idade).

Porém para não induzir o usuário, queria determinar uma forma que ele possa filtrar o dado como quiser (sem etapas, por exemplo, primeiro filtra dimensão paciente - idade e sexo - segundo dimensão remédio - remédio A, B e C).

Só tenho dúvida de como operacionalizar isso de forma mais eficiente com SC. Qual a sugestão de vcs?

E complementando, o banco de dados está no meu sistema mesmo.

Em resumo, a grande dúvida é: qual a melhor forma de criar a aplicação para os pesquisadores gerarem as extrações dos questionários (visto que existem algumas dimensões possíveis)?

Bem, no SC eu não vejo como fazer isto, senão através de filtros.

Oks…

Mas como minhas dimensões estão em tabelas separadas, eu teria que fazer um tabelão com todas as dimensões, para então poder usar o recurso de filtro… Pelo que notei ficou um pouco pesado.

Meu receio é que esse bando de dados pode ganhar proporções e ficar muito lerdo essa solução…

Existe alguma posibilidade de ligação entre grids? Exemplo: filtro pacientes só do sexo masculino (IDs 1, 3, 7 e 11), aí eu já friltro as tabelas de relacionamento só para esses IDs?

Bom, vou elaborar uma solução que imaginei aqui.

Dando certo, retorno para compartilhar.

Certo, ficamos no aguardo.