É muito mais fácil armazenar cada registro em sua totalidade do que armazenar diferenças deles. Então, se você quiser uma diferença de duas revisões, você pode gerar uma conforme necessário usando o
Text_Diff
biblioteca
. Gosto de armazenar todas as versões do registro em uma única tabela e recuperar a mais recente com
MAX(revision)
, um atributo booleano "atual" ou similar. Outros preferem desnormalizar e ter uma tabela espelhada que contém revisões não atuais. Se você armazenar diferenças, seu esquema e algoritmos se tornarão muito mais complexos. Você então precisa armazenar pelo menos uma revisão "completa" e várias versões "dif" e reconstruir uma versão completa a partir de um conjunto de diferenças sempre que precisar de uma versão completa. (É assim que o SVN armazena as coisas. O Git armazena uma cópia completa de cada revisão, não diffs.)
O tempo do programador é caro, mas o espaço em disco geralmente é barato. Por favor, considere se armazenar cada revisão na íntegra é realmente um problema.