Pergunta

Eu estou tentando decidir sobre o melhor método para o log de auditoria dentro do meu aplicativo. A principal razão para o log está relatando a seqüência de eventos (mudanças).

Eu tenho uma hierarquia de objetos, que eu preciso para criar relatórios quando algo muda em qualquer parte dessa hierarquia, em uma última data.

Eu acho que eu tenho três opções:

  1. Tenha um registro para cada tabela e, portanto, combinando a hierarquia de objetos, em seguida, criando uma visão para o relatório.
  2. Alise a hierarquia e de-normalize a mesa, fazer o relatório mais fácil -. Instrução select simples
  3. Tem uma tabela log e têm um registro para cada mudança de fazer relatórios mais difícil, mas mais flexível às mudanças.

Atualmente, estou inclinado para a opção 1.

Foi útil?

Solução

log de auditoria Um é basicamente uma lista cronológica dos eventos que ocorreram, que realizaram esses eventos, e que os eventos eram.

Eu acho que uma vista plana seria melhor, pois ele pode ser facilmente encomendado e consultado. Então, eu estou mais inclinado para a sua opção # 2 / # 3.

Inclua coisas como o tipo de transação, o tempo, a ID de usuário, uma descrição do que mudou, e outras informações pertinentes relacionadas com o seu produto.

Você também pode adicionar coisas para o seu produto ao longo do tempo e você não precisará modificar continuamente o seu módulo de log de auditoria.

Outras dicas

Eu tenho que falar com este assunto, mesmo que seja de idade.

É geralmente uma má idéia ter mesa apenas uma auditoria como você vai criar problemas de bloqueio no banco de dados como tudo hits que mesa. Use tabelas de auditoria separadas para cada tabela.

Também é uma má idéia ter o aplicativo fazer auditoria. Auditoria deve ser feito ao nível da base de dados ou o risco de perder algumas das informações. Os dados não alterar apenas a partir de aplicações na maioria dos bancos de dados; ninguém vai mudar os preços de todos os seus produtos um de cada vez na interface do usuário quando você precisa de um aumento de 10% para todos os 10 milhões deles. Auditoria deve capturar todas as mudanças não apenas alguns deles. Isto deve ser feito em um disparador na maioria dos bancos de dados (SQL Server 2008 tem um construído em função de auditoria). Alguns dos piores possíveis mudanças possíveis (empregados cometer fraude ou querer destruir de forma maliciosa de dados) também são freqüentemente de outros do que a aplicação especialmente se você permitir o acesso nível de tabela para os utilizadores (que você não deve fazer em qualquer banco de dados financeiro ou aquele que contém lugares informação pessoal). Auditoria da aplicação não vai pegar isso. Os desenvolvedores muitas vezes esquecem que em proteger seus dados, fontes externas não são a única ameaça.

Se é para fins de auditoria que eu usaria um verdadeiro acréscimo de somente meio, em vez de uma mesa / tabelas no mesmo banco de dados.

Você sugere que é para fins de história da mudança - caso em que eu iria reestruturar seu application / db para gravar os eventos reais, em primeiro lugar, em vez de apenas o estado atual

.

Eu iria com (2) e (3):. Criar uma tabela única para todas as entradas de auditoria

Uma visão plana é bom, desde que o achatamento trabalho extra não desempenho de impacto.

Você pode olhar para um quadro AOP para ajudar com isso. Ele permitiria que você injetar funcionalidade de registro no início ou no final de qualquer / todos os métodos. Se você ir por este caminho, pode ajudar a definir o que faria sentido para armazenar dados de registo.

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