Я пытаюсь понять, как спроектировать свои таблицы БД, чтобы разрешить отмену-повтор.
Представьте, что у вас есть таблица tasks со следующей структурой:
id <int>
title <varchar>
memo <string>
date_added <datetime>
date_due <datetime>
Теперь предположим, что за несколько дней и несколько входов в систему произошло несколько изменений; но пользователь хочет вернуться к одной из версий.
- Будете ли вы иметь отдельную таблицу для отслеживания изменений или попытаетесь сохранить изменения в таблице tasks ("призрачные" строки, из-за отсутствия лучшего термина)?
- Будете ли вы отслеживать все столбцы или только те, которые каждый раз менялись?
Если это имеет значение, я использую MySQL. Кроме того, если это имеет значение, я хотел бы иметь возможность показывать историю (аля Photoshop) и позволять пользователю переключаться на любую версию.
Дополнительный вопрос: вы бы сохранили всю ячейку memo
при изменении или попытались бы сохранить только дельту? Причина, по которой я спрашиваю, заключается в том, что ячейка memo
может быть большой, и в каждой версии может быть изменено только одно слово или символ. Конечно, сохранение дельты потребует синтаксического анализа, но если отмены не ожидаются очень часто, не лучше ли сэкономить место, а не время обработки?
Спасибо за помощь.