В зависимости от вашего варианта использования я бы выбрал что-то вроде этого:
Создайте таблицу «log» со следующей структурой:
Username|Fieldname |Processed
Pamar |Profile.Email |No
Pamar |Homepage.Blurb |No
Установите триггеры на полях, которые вы хотите отслеживать. При каждом изменении «зарегистрированного» поля триггер создает запись, которая указывает на пользователя и имя поля.
Часть приложения с тегами позволит администратору запрашивать таблицу журналов (выбирая только «необработанные» записи) и обрабатывать одно или несколько полей одновременно.
Вы не предоставляете много подробностей о процессе тегирования / индексирования, но этой таблицы должно быть достаточно для правильной идентификации измененных полей (и вы можете запросить их напрямую, чтобы получить доступ к текущему значению, и это все, что вам нужно). После обработки (индексирования) данного обновления вы можете установить для его флага «Обработано» значение «Да» (или удалить его по вашему выбору).
При желании вы можете иметь поле метки времени, если вы хотите, например, обрабатывать ваши обновления в том же порядке, в котором они были сделаны пользователями.
Если вам даже нужно сохранить «предыдущую версию», вы просто добавляете текстовое поле к текущей структуре и обновляете триггер (ы), чтобы они сохраняли в нем старое значение.