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
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
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.
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.
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.
É 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.
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.
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.
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.
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.
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
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.
Acesse o processo "Início > Desenvolvimento > Banco de Dados > Tabelas de Soma"
Na grade "Visões Criadas" selecione um registro ou todos.
Clique no botão "Atualizar".
Observe se o campo "Status" mudou para "Atualizada"
Acesse o processo "Início > Admin > Agendador de Scripts"
Crie uma nova tarefa
Em "Período" selecione "Intervalo"
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.
Em "Script VFS" preencha com o valor "-1898141887" que a chave do script "updateAllViewMat.ijs".
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.
Grave o agendamento e verifique se a primeira execução deste ocorre sem erros.
Mais informações sobre o agendamento de scripts.
Segue os passos necessários para criar uma tabela de soma no sistema UNUM.
Criar um script com extensão ".iat" no formato de objeto JSON;
Entrar no processo de Tabelas de soma
Escolher a visão que vai ser criada;
Clicar na action de criar visão;
Obs: A tabela de soma só esta disponível a partir da versão 10.1
Com as informações aqui apresentas a respeito da tabela de soma e seu funcionamento, podermos destacar os seguintes pontos:
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.
Utilização de tabelas e visões deltas que ajudam a manter a visão sempre atualizada, sem perder a performance das consultas.
Compatibilidade com três tipos de banco de dados: SQL Server, ORACLE, PGSQL.