Padrão de Procedure para pré-calculo no Banco de Dados

Realizar cálculos na base de dados e enviá-los para outras tabelas é uma tarefa comum aqui na Meritt. Fazemos isso para que nossos sistema sejam rápidos no acesso aos dados.

O problema desta abordagem é que frequentemente são necessários dados calculados para diversas combinações de filtros.

Veja o Portal Ideb por exemplo, cada município tem um gráfico de Pizza mostrando qual a porcentagem de escolas em cada nível qualitativo. Além disso, este mesmo dado é diferente para anos iniciais municipal, anos finais estadual, etc.

Depois de termos feito isso muitas vezes estamos conseguindo chegar em um bom modelo utilizando procedures.

É mais ou menos assim:

  1. Criamos uma tabela temporária com as diversas combinações de filtros, por exemplo, anos finais municipal, anos finais estadual, anos iniciais municipal e anos finais municipal.
  2. Criamos uma tabela para armazenar o resultado dos cálculos;
  3. E fazemos uma procedure que usa um cursos para varrer a tabela temporária e criar os diversos SQLs, um para cada linha da tabela temporária (pra fazer SQL`s dinâmicos usando condicionais nas procedures, faremos outro post mais tarde);
  4. Dentro da mesma procedure cada SQL é executado e pronto.

Antes fazíamos os SQLS com Script PHP ou na mão mesmo.
Até funcionava, mas a chance de pequenos erros ficava muito grande, sem falar na dificuldade em executar tudo depois novamente.

Agora, é só chamar a procedure e pronto.

Para ver um modelo de uma procedure que faz esse tipo de pré-calculo, acesse aqui: Padrão de Procedure para pré-calculo de dados.