То, о чем вы говорите, относится к теме аудита. К сожалению, это одна из наиболее сложных реализаций.
Вот лучшая практика:
Создание новых «таблиц ревизий», которые отражают проверяемые таблицы, но также содержат некоторые дополнительные метаданные (номер редакции, метка времени, пользователь, который внес изменение, тип операции CRUD).
Идея состоит в том, чтобы иметь возможность легко получить полный снимок записи в любой момент времени, а затем использовать его для идеального отката. У вас есть полная уверенность, что данные верны, и это просто работает.
Большинство людей используют триггеры для заполнения этих записей ревизий.
Есть и другие решения. Очевидно, что это будет занимать много времени и занимать много места на диске (но, эй, вы можете безопасно удалить старые записи, не нарушая систему). Преимущество заключается в том, что вы получаете массу гибкости.
Так что большинство людей так и делают.
Вот еще один способ:
Я также реализовал более простой шаблон аудита, который просто отслеживает имя измененной таблицы, измененное поле, старое значение и новое значение вместе с обычными метаданными.
После этого я написал плагин для своего инструмента ORM, который в значительной степени автоматически выполняет сохранение данных аудита. Иначе это было бы очень утомительно.
Возможно, вы захотите пойти по этому пути. И это правда, вы, вероятно, можете получить откаты от этого. Но это будет сложнее. Например, если вы хотите восстановить любую дату и время, вам придется проанализировать все эти отдельные записи изменений на уровне поля, чтобы заново создать полный снимок. И горе вам, если вы когда-нибудь измените название поля!
Так что этот метод аудита хорош для генерации и отображения контрольного журнала, но если вы хотите выполнить откат, у него гораздо больше движущихся частей, и много других вещей, которые могут пойти не так. Прислушайтесь к моим словам: держитесь подальше от этого, если вам нужны откаты, это будет больше работы, чем просто создание этих таблиц ревизий!
Ссылки
Вот ссылка на stackoverflow, где они говорят о реализации аудита в SQL Server, некоторые люди упоминают Change Data Capture, который является новым в SQL 2008 Enterprise ... Он не выполняет откат автоматически, но он сохраняет данные аудита:
Предложения по внедрению таблиц аудита в SQL Server?