Во-первых, я бы порекомендовал изменить структуру вашей таблицы примерно так:
id field1 field2 field3 field4 timestamp
примерно так:
Table 1
-------
id fieldKey value timestamp
1 1 42 12:03am
2 3 'Cow' 1:45am
3 2 'Moo' 2:33am
4 4 99 3:59am
Table 2
-------
fieldKey fieldLabel
1 Field One
2 Field Two
3 Event One
4 Event Two
Во-вторых, вы можете достичь желаемого, скопировав старое значение или вычислив хэш значений поля (для длинных полей) и сохранив их в другом поле (oldField1, oldField2 и т. Д.) Вместе с отметкой времени, затем опросить таблицу. Я считаю, что все базы данных имеют хэш-функцию, например, SHA1 ('xyz') или MD5 ('abc'), хотя в каждой из них может быть немного другое имя.
Затем, когда вы опрашиваете таблицу на предмет изменений, вы видите строку, которая изменилась, и вы можете выполнить сравнение полей по полям, чтобы выяснить, какое поле изменилось. Таким образом, вы бы сравнили field1 со oldField1, field2 со oldField2, field3 со oldField3 и т. Д. Для BLOB-объектов вы можете сравнить SHA1 (field4) со oldField4).
Создать триггер хранимой процедуры для копирования полей при обновлении отметки времени.
Другое решение заключается в создании таблицы журнала изменений данных, в которой хранятся только изменения. Он будет вставлен в хранимую процедуру триггера и будет выглядеть так:
id tableName rowKey fieldName oldValue newValue timestamp
1 WINDOWS_EVENTS 42 event1 stable crash 4:44am