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