Что такое Soft Delete (мягкое удаление) и какие проблемы с уникальными индексами оно создаёт в БД?

Soft delete помечает строку удалённой вместо физического удаления. Обычный уникальный индекс продолжает учитывать её, поэтому повторное создание записи с тем же ключом может завершиться конфликтом.

Короткий ответ

Что ответить на собеседовании

Soft delete помечает строку удалённой вместо физического удаления. Обычный уникальный индекс продолжает учитывать её, поэтому повторное создание записи с тем же ключом может завершиться конфликтом.

Подробный разбор

Ответ с пояснениями

Soft delete помечает строку удалённой вместо физического удаления. Обычный уникальный индекс продолжает учитывать её, поэтому повторное создание записи с тем же ключом может завершиться конфликтом.

В PostgreSQL для уникальности только активных строк можно использовать частичный уникальный индекс с условием deleted_at IS NULL. Простой составной UNIQUE(key, deleted_at) не всегда обеспечивает нужную семантику из-за NULL и особенностей СУБД. Нужно определить поведение восстановления: прежний ключ уже мог занять другой объект. Также учитывают внешние ключи, фильтрацию во всех запросах, рост таблицы и правила окончательного удаления персональных данных.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее