Soft delete VS физическое удаление: преимущества и недостатки

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Мягкое удаление — это такой подход, при котором записи в базе данных просто помечаются как удаленные, но по факту они остаются на прежних местах. Такое поведение может быть полезным для таких сценариев как восстановление данных, аудит и целостность связей. Впрочем, он может создать трудности, связанные с производительностью, и добавить сложностей при составлении запросов:

SQL
Скопировать код
/* Этот код – не смертельный удар от Таноса, а лишь легкое молниеносное касание */
ALTER TABLE your_table ADD COLUMN is_deleted BOOLEAN DEFAULT FALSE;

Чтобы отметить запись как удаленную:

SQL
Скопировать код
/* Запись, пришло время уходить. Собери свои кортежи и покинь надолго Дом данных. */
UPDATE your_table SET is_deleted = TRUE WHERE id = your_id;

Что же нужно делать, чтобы 'удаленные' записи не попадали в выборку:

SQL
Скопировать код
/* Здравствуйте, SQL: есть ли возможность просто игнорировать записи, отмеченные как удаленные? */
SELECT * FROM your_table WHERE is_deleted = FALSE;

Необходимо тщательно прорабатывать все важные факторы и примирять их с требованиями вашего проекта к безопасности и возможности восстановления данных.

Кинга Идем в IT: пошаговый план для смены профессии

Как не нарваться на общеизвестные подводные камни при мягком удалении

Меньшее из зол: применяйте представления и функции

Вместо того чтобы постоянно включать в запросы WHERE is_deleted = FALSE, гораздо проще создать представление или функцию, которые автоматически отфильтруют удаленные записи:

SQL
Скопировать код
/* Теперь мир предстает перед вами в розовых очках, где удаленные записи остались где-то в прошлом */
CREATE VIEW active_records AS SELECT * FROM your_table WHERE is_deleted = FALSE;

Метод в безумии: двухэтапное удаление

Два этапа удаления предотвратят непредвиденную потерю данных: сначала мягкое удаление, а затем полное – только после подтверждения.

Анатомия производительности: архивирование данных

Архивирование старых записей обезопасит работу основной таблицы и поддержит высокую производительность базы данных:

SQL
Скопировать код
/* С тобой в сугроб, старичок! */
INSERT INTO archive_table SELECT * FROM your_table WHERE is_deleted = TRUE;

Гипотенуза целостности данных

Спасите себя от головной боли с ограничениями внешних ключей, настроив каскадные операции для учета мягких удалений.

Визуализация

Представьте, что таблица в базе данных – это ваша книжная полка:

Markdown
Скопировать код
📚 Таблица базы данных: [Книга 1, Книга 2, Книга 3, Книга 4]

Мягкое удаление сработает так, как если бы вы оснастили книги секретными ящиками:

Markdown
Скопировать код
📚 Мягкое Удаление: [Книга 1✨, Книга 2, Книга 3, Книга 4]

Секретная ячейка (✨) надежно скрывает информацию: она становится невидной, но остается доступной при необходимости:

Markdown
Скопировать код
👀 Открытая Полка: [Книга 2, Книга 3, Книга 4]
🗝️ Секретное Пространство: [Книга 1✨]

Метод мягких удалений позволяет поддерживать доступ к данным, скрытых от постороннего взгляда.

Глубокое погружение в мир соображений о мягком удалении

Скажите 'нет' булевым переменным

Использование deleted_at вместо is_deleted будет более предпочтительным, так как это поле отражает не только факт удаления, но и время его происшествия.

Закон и порядок: Соблюдайте собственные правила

Убедитесь, что ваша система обработки данных соответствует требованиям правовых политик, таких как GDPR, где важным аспектом является "право на забвение".

Генеральная уборка: Осуществляйте регулярную очистку базы данных

Постоянная очистка от логически удаленных записей поможет поддерживать вашу базу данных в чистоте и быстродействии.

Мысли вне коробки: будьте стратегом, а не тактиком

Сосредотачивайтесь на долгосрочных эффектах, которые могут иметь мягкие удаления на производительность базы данных. Объем данных ведь может непрерывно расти, а это определенно замедлит обработку запросов.

Поиск серединного пути: баланс между восстановлением данных и их целостностью

Стремитесь найти гармонию между легкостью восстановления и уверенностью в данных — терять одно ради другого никак нельзя.

Полезные материалы

  1. Мягкое удаление – Википедия — Познакомьтесь с практическими примерами применения концепции мягкого удаления.
  2. Временные паттерны — Мартин Фаулер детально расскажет о временных аспектах данных.
  3. Мягкое удаление в хранилищах Azure – Microsoft Learn — Полное руководство по реализации мягких удалений в хранилище Azure от Microsoft.
  4. Мир без мягкого удаления... — Обсуждение преимуществ и недостатков мягкого удаления на Stack Overflow.