Realizar versionamento de registros, ou melhor, gravar o histórico de alterações de dados em uma base relacional, nunca foi algo trivial. Com a ascensão dos bancos de dados orientados a documentos, como MongoDB, a coisa ficou menos complexa. Porém, bancos relacionais estão espalhados por ai e a necessidade de tracking de mudanças continua.
Uso de Trigger
Solução mais comum.
Uso de XML/JSON
Já vi soluções que serializavam um objeto C# em XML e persistia o conteúdo em uma linha na tabela. O mesmo, nos dias de hoje pode se feito com JSON.
SQL Server 2016
Nesta versão a Microsoft lançou um recurso out-of-the-box. No artigo Create a system-versioned temporal table podemos entender mais sobre.
Para explorar mais
- Datomic , banco que resolve a questão by design
- https://www.reddit.com/r/PostgreSQL/comments/kt1agc/what_is_the_best_way_of_implementing/
- https://www.specfy.io/blog/7-git-like-versioning-in-postgres