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