Вы создаете так называемую «таблицу аудита». Есть много способов сделать это; пара из них:
Создайте таблицу с соответствующими ключевыми полями и полями до / после для всех интересующих вас столбцов исходной таблицы вместе с отметкой времени, чтобы вы знали, когда было сделано изменение.
Создание таблицы с соответствующими ключевыми полями, отметкой времени изменения, именем поля и столбцами до / после.
Метод (1) имеет проблему с тем, что в итоге вы получите много полей в таблице аудита - в основном два для каждого поля в вашей исходной таблице. Кроме того, если изменяется только одно или два поля в исходной таблице, большинство полей в таблице аудита будут иметь значение NULL, что может привести к потере пространства (в зависимости от вашей базы данных). Также требуется много специального кода, чтобы выяснить, какое поле изменилось, когда вы вернетесь к обработке таблицы аудита.
Метод (2) имеет проблему, заключающуюся в том, что вы создаете отдельную строку в таблице для каждого поля, которое изменяется в исходной таблице, что может привести к много строк в таблице аудита (одна строка для каждого поля изменена). Поскольку каждое изменение поля приводит к записи новой строки в таблицу аудита, у вас также есть одинаковые значения ключей в нескольких строках, которые могут занимать кучу места только для ключей.
Независимо от того, как структурирована таблица аудита, обычно используется триггер для их обслуживания.
Надеюсь, это поможет.