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