Я бы создал таблицу истории для вашей таблицы задач. Та же структура, что и у заданий + новое поле с именем previousId. Это будет содержать предыдущий идентификатор изменения, так что вы можете вернуться вперед через различные изменения (отменить / повторить).
Зачем нужна новая таблица истории? По простой причине: не перегружайте таблицу задач вещами, для которых она не предназначена.
Что касается пробела, в Истории вместо Заметки используйте двоичный формат и заархивируйте содержимое текста, который вы хотите сохранить. Не пытайтесь обнаружить изменения. Вы столкнетесь с ошибочным кодом, который приведет к разочарованию и потере времени ...
Оптимизация:
Более того, вы можете оставить только три столбца в таблице истории:
1. taskId (внешний ключ к задачам)
2. данные - двоичное поле. Перед сохранением в таблице истории создайте строку XML, содержащую только измененные поля.
3. previousId (поможет сохранить очередь изменений и позволит перемещаться вперед и назад)
Что касается поля данных, создайте строку XML следующим образом:
<task>
<title>Title was changed</title>
<date_added>2011-03-26 01:29:22<date_added>
</task>
Это в основном скажет вам, что на этот раз вы изменили только поля title и date_added.
После того, как строка XML построена, просто заархивируйте ее, если хотите, и сохраните в поле данных таблицы History.
XML также обеспечит гибкость. Если вы добавляете / удаляете поле в таблице задач, вам также не нужно обновлять таблицу истории. Таким образом, структура таблицы задач и таблицы истории разделена, поэтому вам не нужно каждый раз обновлять две таблицы.
PS: не забудьте добавить несколько индексов для быстрой навигации по таблице истории. Индексируемые поля: taskId и previousId, так как вам понадобятся быстрые запросы к этой таблице.
Надеюсь, это поможет.