Me alegro de haber encontrado este hilo. Yo también me preguntaba qué pensaba la gente sobre este tema. He implementado el "marcado como eliminado" durante unos 15 años en muchos sistemas. Cada vez que un usuario llamaba para decir que algo se eliminó accidentalmente, ciertamente era mucho más fácil marcarlo como no eliminado que volver a crearlo o restaurarlo desde una copia de seguridad.
Estamos usando postgresql y Ruby on rails, parece que podríamos hacer esto de una de dos maneras, modificar los rieles o agregar un disparador ondelete y en su lugar, hace una función pl / pgsql para marcar como eliminado. Me estoy inclinando hacia lo último.
En cuanto a los impactos de rendimiento, será interesante ver los resultados de EXPLAIN-ANALYZE en tablas grandes para pocos elementos eliminados, así como muchos elementos eliminados.
En los sistemas usados a lo largo del tiempo que he descubierto, los nuevos usuarios tienden a hacer cosas tontas como eliminar cosas accidentalmente. Entonces, cuando las personas son nuevas en un puesto, tienen todos los derechos de acceso de la persona que estuvo anteriormente en ese puesto, excepto con cero experiencia. Eliminar algo accidentalmente y poder recuperarse rápidamente hace que todos vuelvan a trabajar rápidamente.
Pero como alguien dijo, a veces es posible que necesite esa clave en particular por alguna razón, en ese momento necesitaría eliminarla realmente, luego volver a crear los registros (al recuperarla y modificar el registro).