Я действительно думаю, что вы ищете временную базу данных . Наша собственная реализация добавила пару идентификаторов журнала аудита в таблицу, «создать идентификатор» и «удалить идентификатор» (и каждая транзакция, которая изменила базу данных, была объединена в «журнал аудита» и получила уникальный последовательный идентификатор). Для каждой транзакции, которая добавила запись в таблицу, в качестве идентификатора создания использовался идентификатор журнала аудита, а идентификатор удаления был равен нулю. Когда запись изменялась, новая версия имела новый идентификатор создания, и тот же идентификатор использовался в качестве идентификатора удаления для старой версии.
Было довольно легко создать представление таблицы, где идентификатор удаления был равен нулю, создав виртуальную таблицу только с текущими данными. Вы также можете найти содержимое таблиц непосредственно перед обработкой конкретной транзакции или сразу после нее, получить список транзакций, которые изменили определенную строку таблицы и т. Д.
За все это есть штрафы за время, пространство и сложность. Но для нас, имеющих дело с крупными суммами денег, это того стоило.