Мягкое удаление. Перемещение записей или создание колонки "удалено"
Я немного запутался в том, что лучше использовать для мягкого удаления. Есть два способа мягкого удаления.
- create table for deleted records.(In this way we will make copy for the records in the table of deleted records, then delete it from its table)
- create extra column called deleted,(In this way we will only change the status of this field to true , then at display records we will filter according to this extra field)
Кроме того, я хочу хранить изменения записей после каждого обновления, поэтому я думаю, что создание дополнительной таблицы будет более подходящим решением. Каково ваше мнение?
Лучшим вариантом будет второй, в вашем первом примере это не мягкое удаление, если вы удаляете его из таблицы - мягкое удаление должно минимально изменять данные. Оставление строки на месте - это цель мягкого удаления, оно оказывает минимальное влияние на данные и сохраняет все атрибуты, такие как значение индекса первичного ключа и любые внутренние параметры, которые вы не можете видеть, которые может использовать база данных.
Ваш первый вариант гораздо менее лаконичен, поскольку он означает дублирование структур данных. Обычный подход заключается в добавлении столбца "deleted_at" (по умолчанию NULL), который позитивно идентифицирует состояние записи.
Я согласен с @web-engineer, добавление нулевого столбца с датой, когда строка была мягко удалена, является лучшим вариантом. Я использовал этот ресурс для этого.
Отвечая на вторую часть вашего вопроса, да, потребуется дополнительная таблица. Существует стороннее приложение под названием django-simple-history, которое обрабатывает ее за вас.