software‎ > ‎módulos‎ > ‎desenvolvimento‎ > ‎artigos‎ > ‎

Tabelas de Soma


Introdução


Tabelas de soma são tabelas que totalizam o conteúdo de um determinado campo de uma tabela.
Exemplificando:

Seja uma tabela hipotética de Vendas

 Data     Classe Valor
 01/05
 2 32
 01/05 2 22
 01/05 3 11
 02/05 3 44    

Desejamos gerar uma tabela de soma, agregando por data e classe.

O programador, através de um script vai definir a tabela, os campos de agregação, e os campos de soma:

Exemplo de script:

{
    tableName: "Vendas"
    viewName : "Vendas_Soma"
    fields:[{name:"data"},
              {name:"classe"}, 
              {name: "valor", agg: "sum"} ]

    indexes: ["data,classe", "classe"]

}

Teríamos a tabela Vendas_Soma

 Data Classe Valor
 01/05 2 54
 01/05 3 11
 02/05 3 44


O conceito de tabelas de soma do sistema UNUM está ligado aos conceitos de visão de dados, visão materializada, notação JSON e objetos literais. É necessário compreensão destes conceitos.

Visão de dados

Tabela derivada a partir de uma ou várias tabelas do banco de dados através de uma consulta. As visões não armazenam dados.

Wikipedia:
Uma visão, ou vista (em inglês: view), no contexto dos bancos de dados é uma relação que não armazena dados, composta dinamicamente por uma consulta que é previamente analisada e otimizada.

Entre as principais utilidades estão, a depender do SGBD utilizado, o aumento de segurança por propiciar uma visão limitada e controlada dos dados que podem ser obtidos da base e aperformance por utilizar uma consulta previamente otimizada, tornando desnecessário este processo de otimização quando for realizada.

Desvantagem em usar visões

São re-computadas sempre que uma consulta a referencia. Esse processo pode ter um custo bastante elevado. 
Uma solução usada para contornar esta desvatagem seria usar visões materializadas.


Visão materializada

É o resultado do conteúdo de uma visão computada e armazenado fisicamente em uma tabela do banco de dados.
Uma consulta envolvendo a visão pode acessar diretamente a visão materializada. 

Obs: O sistema UNUM já possibilitava o uso de visões materializadas.

Desvantagens em usar visões materializadas

Como uma visão materializada é uma tabela derivada e definida a partir de uma tabela base, operações de inserção, deleção e atualização nos registros dessa tabela base fazem com que a visão materializada fique desatualizada.  Recriar a visão materializada como um todo pode ser um processo demorado e ineficiente.

Uma solução para contornar esta desvantagem seria aplicar na visão materializada apenas as alterações feitas na tabela base. Este tipo de atualização é chamado de manutenção incremental da visão materializada.

Como funciona a tabela de soma?


Aqui segue um breve descrição dos item desta imagem:
  • Tabela Base: Nome da tabela do sistema.
  • Tabela Delta: Tabela gerada pela API da tabela de soma que será onde ficará todas as alterações realizadas na tabela base desde a última a atualização da visão materializada base.
  • Visão Base: Uma visão de dados construída a partir da tabela base com os dados agregados.
  • Visão Delta: Visão da tabela delta, com os mesmo campos agredados da visão base.
  • Visão Materializada Base: Visão materializada da visão base. Se o banco de dados não suportar visão materializada, será criada pela API de tabelas de soma uma tabela física.
  • Visão do usuário: União da visão delta com a visão materializada base. Com isso a visão do usuário sempre terá os dados on-line, sem gap de atualização.

Notação JSON

Wikipedia: JSON (com a pronuncia djeisón), um acrônimo para "JavaScript Object Notation", é um formato leve para intercâmbio de dados computacionais. JSON é um subconjunto da notação de objeto de JavaScript, mas seu uso não requer Javascript exclusivamente.

Criando um objeto JSON

A criação do objeto JSON é feita criando um script com a extensão .iat com o seguinte formato:

{
    tableName: "Vendas",                    
    viewName : "Vendas_Soma",
    fields:[{name:"data"},                 
              {name:"classe"},                 
              {name: "valor", agg: "sum"} ] ,
    indexes: ["data,classe", "classe"]    
}

Onde,

tableName = Nome da tabela
viewName = Nome da visão
fields = Nome dos campos e os tipos de aggregação
indexes = Nome dos campos que vão ser criados indices no banco. Poderá ser criado indices simples ou compostos.

O processo para criação das tabelas de soma

Local: Ir Para / Desenvolvimento / Banco de dados / Tabelas De Soma.ip



Grade de visões do sistema: Contém todos os scripts que define uma tabela de soma
Grade de visões criadas: Contém todos as tabelas de soma criada no banco de dados

Atualização de uma visão materializada

A atualização das visões materializada é realizada através de um tarefa no scheduller executada de acordo com o periodicidade configurada, ou através do processo de criação das tabelas e soma.

Atualizando Manualmente

Acesse o processo "Início > Desenvolvimento > Banco de Dados > Tabelas de Soma"
  1. Na grade "Visões Criadas" selecione um registro ou todos.
  2. Clique no botão "Atualizar".
  3. Observe se o campo "Status" mudou para "Atualizada"

Agendando a Atualização

  1. Acesse o processo "Início > Admin > Agendador de Scripts"
  2. Crie uma nova tarefa
  3. Em "Período" selecione "Intervalo"
  4. Em "Hora" selecione o intervalo entre as execuções do script, recomendamos 10 minutos, mas o valor pode ser definido de acordo com o usuário.
  5. Em "Script VFS" preencha com o valor "-1898141887" que a chave do script "updateAllViewMat.ijs".
  6. Caso não seja encontrado o "Script VFS" acima, favor verificar se há permissão para acessar o script em Permissões > products > Engine > library > sumtable.
  7. Grave o agendamento e verifique se a primeira execução deste ocorre sem erros.
Mais informações sobre o agendamento de scripts.

Criando uma tabela de soma no sistema

Segue os passos necessários para criar uma tabela de soma no sistema UNUM.
  1. Criar um script com extensão ".iat" no formato de objeto JSON;
  2. Entrar no processo de Tabelas de soma
  3. Escolher a visão que vai ser criada;
  4. Clicar na action de criar visão;
    Obs: A tabela de soma só esta disponível a partir da versão 10.1

Conclusão

Com as informações aqui apresentas a respeito da tabela de soma e seu funcionamento, podermos destacar os seguintes pontos:
  1. Otimização nas consultas que utilizem o tipo de aggregação do tipo SUM, com a criação de visões materializadas e com a oportunidade de criação de indices simples ou compostos para os campos. 
  2. Utilização de tabelas e visões deltas que ajudam a manter a visão sempre atualizada, sem perder a performance das consultas. 
  3. Compatibilidade com três tipos de banco de dados: SQL Server, ORACLE, PGSQL.