Pergunta

Eu estou tentando determinar como eu deve armazenar dados transacionais histórico.

devo armazená-lo em uma única tabela onde o registro só fica reinserido com um novo timestamp de cada vez?

Eu deveria sair os dados históricos em uma tabela separada 'história' e manter apenas os dados atuais na tabela de 'ativo'.

Se sim, como faço para melhor fazer isso? Com um gatilho que copia automaticamente os dados para a tabela de histórico? Ou com a lógica na minha candidatura?

Atualização por comentário do Welbog:

Haverá grandes quantidades de dados históricos (centenas de milhares de filas - eventualmente, potencialmente milhões)

Principalmente buscas e operações de relatórios serão executados em dados históricos.

O desempenho é uma preocupação. As pesquisas não deve ter para executar toda a noite para produzir resultados.

Foi útil?

Solução

Se a exigência é apenas para geração de relatórios, considerar a construção de um armazém de dados separado. Isso permite usar estruturas de dados como mudando lentamente dimensões que são muito melhor para relatórios históricos, mas não funcionam bem em um sistema transacional. A combinação resultante também move o relatório histórico fora de seu banco de dados de produção que será uma vitória desempenho e manutenção.

Se você precisar dessa história a estar disponível dentro do aplicativo, então você deve implementar algum tipo de controle de versão ou lógica recurso de exclusão ou fazer tudo totalmente contra e restate (isto é, transações nunca são apagados, apenas inverteu para fora e corrigido). Pense muito bem sobre se você realmente precisam desta vez que irá adicionar um monte de complexidade. Fazendo uma aplicação transacional que pode reconstruir o estado histórico corretamente é consideravelmente mais difícil do que parece. software financeiro (por exemplo sytems de subscrição de seguros) não consegue fazer isso muito mais do que você imagina.

Se você precisar a história apenas para o log de auditoria, tabelas sombra marca e gatilhos log de auditoria. Isto é muito mais simples e mais robusto do que tentando implementar corretamente e de forma abrangente o log de auditoria dentro do aplicativo. Os gatilhos também vai pegar mudanças para o banco de dados de fontes externas à aplicação.

Outras dicas

Esta questão vai ao longo da linha de lógica de negócios. Conheça os seus requisitos de negócio primeiro e depois começar a partir daí. Um Data Warehouse é uma boa solução para este tipo de situação. ETL vai lhe dar muitas opções para lidar com fluxos de dados. Seu conceito básico de 'História' vs 'Active' é totalmente correcta. Seus dados história será mais eficiente e flexível se mantido em um armazém de dados com todas as suas tabelas de dimensão e de fatos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top