Melhor maneira de criar um banco de dados e tabela para manter registros de alterações?

16

Preciso configurar um recurso de histórico em um projeto para acompanhar as alterações anteriores.

Digamos que eu tenho duas tabelas agora:

NOTES TABLE (id, userid, submissionid, message)

SUBMISSIONS TABLE (id, name, userid, filepath)

Exemplo: Eu tenho uma linha nas anotações e o usuário deseja alterar a mensagem. Quero acompanhar o seu estado antes e depois da mudança.

Qual seria a melhor abordagem para configurar uma coluna em cada uma dessas tabelas, indicando se um item é "antigo". 0 se ativo OU 1 se excluído / invisível.

Eu também quero criar uma AUDIT TRAILtabela history ( ) que contém o idestado anterior, o iddo novo estado, a qual tabela esses IDs se relacionam?

Schwarz
fonte

Respostas:

5

Por favor veja

http://www.codeproject.com/Articles/105768/Audit-Trail-Tracing-Data-Changes-in-Database

É uma leitura muito boa das abordagens para criar uma trilha de auditoria no design do banco de dados. Trilhas de auditoria são necessárias para a implementação de um banco de dados. Você sempre deve poder ver as ações dos usuários do banco de dados no sistema.

Podemos rastrear quais linhas foram alteradas quando em nosso sistema PTA (Point in Time) adicionando algumas colunas PTA padrão (point in time) a todas as tabelas de interesse do PTA.

Sugiro o seguinte:

DateCreated  the actual date on which the given row was inserted.
DateEffective  the date on which the given row became effective.
DateEnd  the date on which the given row ceased to be effective.
DateReplaced  the date on which the given row was replaced by another row.
OperatorCode  the unique identifier of the person (or system) that created the row.
Hector
fonte
qual é a melhor maneira de aplicar a 'Solução nº 2: tabela de rastreamento de dados dedicada' para um aplicativo OLTP.
AA.SC 10/09/2015
A empresa em que trabalho atualmente usa vários esquemas, um especificamente para a trilha de auditoria. A tabela de auditoria é realmente um design bastante simples ao usar a Solução 2 (que é exatamente o que usamos aqui no trabalho). Divida as diferentes tarefas (tabela de inventário atualizada, informações do cliente atualizadas ou excluídas, créditos fornecidos ao cliente etc.) e crie a tabela de auditoria com base em ações comuns das quais os usuários são capazes. Isso responde à sua pergunta em relação à aplicação da solução 2 ao seu banco de dados, se não, por favor, esclareça. Obrigado!
Hector
Na verdade, já estamos auditando dados com a primeira abordagem usando Tabelas de Auditoria, mas os dados de Auditoria estão se tornando tão grandes e agora queremos converter nossa abordagem apenas capturando dados em colunas alteradas. Minha pergunta é como posso conseguir essa abordagem? qual é a melhor maneira de rastrear qual coluna da tabela é alterada? .. se uma tabela tiver mais de 20 colunas, uma delas será com DataType Text.
AA.SC
10

Ao projetar recursos de versão em seus dados, existem vários requisitos mínimos (eu acho):

  • Cada versão dos dados deve ser independente e independente de outras versões. Isso significa que nenhum sinalizador ou outro indicador mostra qual é a versão atual e qual é o "histórico". Isso também significa atualizar a entidade, inserir apenas uma nova versão - não é necessária nenhuma atualização das versões anteriores.
  • Evite o que chamo de dependência de abrangência de linha. É nesse ponto que um campo (Data_Terminal) de uma linha deve permanecer sincronizado com outro campo (Data_Inicio) de uma linha diferente. Isso dificulta o trabalho com os dados e é uma excelente fonte de anomalias.
  • A versão atual e todas as versões anteriores devem estar na mesma tabela. Isso torna possível usar a mesma consulta para visualizar dados passados ​​"a partir de" uma data específica e para visualizar os dados atuais.
  • Chaves estrangeiras para dados que foram versionados devem funcionar da mesma forma que dados normais (não versionados).
  • O design deve ser tão simples ou universalmente entendido que a curva de aprendizado para novos desenvolvedores é minimizada.

Aqui estão os slides de uma apresentação que fiz algumas vezes em feiras de tecnologia. Ele cobre como tudo o que foi dito acima pode ser feito. E aqui está um documento que entra em mais detalhes. Devo pedir desculpas pelo documento - é um trabalho em andamento e nem todas as seções foram concluídas. Mas deve fornecer a você todas as informações necessárias para implementar qualquer coisa, desde versão simples até acesso bi-temporal completo.

TommCatt
fonte
1
Pontos muito bons! No entanto, não entendo bem This means no flag or other indicator showing which is the current version and which are "history.", se não há sinalizador ou indicador, como diferenciamos a versão atual da versão do histórico? Especialmente com base no seu terceiro ponto, no qual você sugere que eles estejam na mesma tabela.
GMsoF 26/03
A apresentação mostra um design de exemplo, incluindo a consulta para ler dados atuais e / ou passados ​​das tabelas. Se parecer interessante o suficiente para aprofundar, o documento contém muito mais detalhes.
TommCatt 27/0318