Pergunta

Para a minha aplicação existem várias classes de entidade, usuário, cliente, Post, e assim por diante

Eu estou a ponto de projetar o banco de dados e eu quero armazenar a data em que as entidades foram criadas e atualizadas. Isso é onde fica complicado. Claro que uma opção é adicionar created_timestamp e update_timestamp colunas para cada uma das tabelas entidade, mas que não é tão redundantes?

Outra possibilidade poderia ser a criação de uma tabela log que armazena essas informações, e que poderia ser feito para conter faixa de manter atualizações para qualquer entidade.

Todos os pensamentos? Estou inclinado a aplicação desta decisão.

Foi útil?

Solução

A-log single-table-para-toda-mesas abordagem tem dois problemas principais que eu posso pensar de:

  1. O design da tabela de log será (provavelmente) restringir o desenho de todas as outras mesas. O mais provável é a tabela de log teria uma coluna chamada TableName e depois outra coluna chamada PKValue (que seria armazenar o valor da chave primária para o registro que você está registrando). Se algumas das suas tabelas têm chaves primárias compostas (ou seja, mais de uma coluna), então o design do seu tabela de log teria que conta para este (provavelmente por ter colunas como PKValue1, PKValue2 etc.).
  2. Se esta é uma aplicação web de algum tipo, então a identidade do usuário que estaria disponível a partir de um gatilho seria a conta do aplicativo, em vez do ID do usuário de aplicativo web (que é mais provável que você realmente quer para armazenar em seu campo CreatedBy). Isso só iria ajudá-lo a distinguir entre registros criados pelo seu código do aplicativo web e registros criados contrário.

createdDate e ModifiedDate colunas não são redundantes só porque eles estão definidos em cada mesa. Gostaria de ficar com que desencadeia aproximação e inserção de venda e de atualização em cada tabela para preencher essas colunas. Se eu também precisava gravar o usuário final que fez a alteração, eu gostaria pule os gatilhos e preencher os campos timestamp e usuário do meu código do aplicativo.

Outras dicas

I fazer o último, com um "log" ou tabela "eventos". Na minha experiência, a "atualização" timestamp torna frustrante muito rápido, porque uma grande parte do tempo você se encontra em uma correção onde você não quer apenas o mais recente tempo de atualização.

Como, muitas vezes, você precisa incluir os criados / timestamps atualizados em sua camada de apresentação? Se a resposta é nada mais do que "uma vez em um grande, grande tempo", eu acho que você seria melhor servido por ter essas colunas em cada tabela.

Em um projeto que eu trabalhei em um par de anos atrás, implementamos gatilhos que atualizados o que chamamos de uma tabela de auditoria (é armazenado informações básicas sobre as mudanças que estão sendo feitas, uma tabela de auditoria por tabela). Esta data modificada incluído (e modificada pela última vez).

Eles só foram aplicadas a tabelas de chaves (não se junta ou tabelas de dados de referência).

Esta removido um monte de frustração normal ter que conta para LastCreated & campos LastModified, mas introduziu o aborrecimento de manter os gatilhos até à data.

No final, o design da tabela gatilho / auditoria funcionou bem e todos nós tivemos que lembrar era remover e reaplicar os gatilhos antes de ETL (!).

É para um baseado na web CMS eu trabalhar. A criação e últimas datas atualizadas serão exibidas na maioria das páginas e haverá listas para os últimos criados (e atualizado) páginas. A interface de administração também vai usar esta informação.

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