Estou trabalhando em um projeto da web que envolve conteúdo editável pelo usuário e gostaria de poder acompanhar a versão do conteúdo real, que fica em um banco de dados. Basicamente, quero implementar históricos de alterações no estilo wiki.
Fazendo algumas pesquisas em segundo plano, vejo muita documentação sobre como versionar o esquema do banco de dados (o meu já está realmente controlado), mas qualquer estratégia existente sobre como rastrear as alterações no conteúdo do banco de dados é perdida na avalanche de material de versão do esquema, pelo menos nas minhas pesquisas.
Posso pensar em algumas maneiras de implementar meu próprio controle de alterações, mas todas elas parecem bastante grosseiras:
- Salve a linha inteira em cada alteração, relacione a linha de volta ao ID de origem com uma chave Primária (no que estou inclinado atualmente, é a mais simples). Muitas pequenas alterações podem produzir muita inchaço na mesa, no entanto.
- salve antes / depois / usuário / registro de data e hora para cada alteração, com um nome de coluna para relacionar a alteração novamente à coluna relevante.
- salve antes / depois / usuário / carimbo de data / hora com uma tabela para cada coluna (resultaria em muitas tabelas).
- salve diffs / user / timestamp para cada alteração com uma coluna (isso significa que você precisará percorrer todo o histórico de alterações para voltar a uma determinada data).
Qual é a melhor abordagem aqui? Rolar sozinho parece que provavelmente estou reinventando a (melhor) base de código de outra pessoa.
Pontos de bônus para o PostgreSQL.