Я рад, что нашел эту тему. Мне тоже было интересно, что люди думают об этой проблеме. Я реализовал «помеченные как удаленные» в течение 15 лет во многих системах. Всякий раз, когда пользователь звонил, чтобы сказать, что что-то было случайно удалено, было, конечно, намного легче пометить это как удаленное, чем воссоздать его или восстановить из резервной копии.
Мы используем postgresql и Ruby на рельсах, похоже, что мы можем сделать это одним из двух способов, изменить рельсы или добавить триггер ondelete и вместо этого сделать функцию pl / pgsql, чтобы пометить как удаленный. Я склоняюсь к последнему.
Что касается производительности, будет интересно увидеть результаты EXPLAIN-ANALYZE для больших таблиц для нескольких удаленных элементов, а также для многих удаленных элементов.
В системах, которые использовались с течением времени, я обнаружил, что новые пользователи, как правило, делают глупости, например, случайно удаляют. Таким образом, когда люди новички в должности, они имеют все права доступа человека, ранее находившегося в этой должности, за исключением случаев, когда у них нет опыта. Случайное удаление чего-либо и возможность быстрого восстановления заставляет всех быстро вернуться к работе.
Но, как кто-то сказал, иногда вам может понадобиться этот конкретный ключ по какой-то причине, в этот момент вам нужно будет действительно удалить его, а затем заново создать записи (восстановить его и изменить запись).