Uma estratégia que você pode usar é MVCC, Multi-Value Concurrency Control. Nesse esquema, você nunca faz atualizações em nenhuma de suas tabelas, apenas faz inserções, mantendo os números de versão para cada registro. Isso tem a vantagem de fornecer um instantâneo exato de qualquer momento e também evita completamente os problemas de bloqueio de atualização que afetam muitos bancos de dados.
Mas isso cria um banco de dados enorme e todos os selecionados exigem uma cláusula extra para selecionar a versão atual de um registro.