Estou feliz por ter encontrado este tópico. Eu também estava me perguntando o que as pessoas pensavam sobre esse assunto. Implementei o 'marcado como excluído' por cerca de 15 anos em muitos sistemas. Sempre que um usuário ligava para dizer que algo foi excluído acidentalmente, certamente era muito mais fácil marcá-lo como não excluído do que recriá-lo ou restaurar de um backup.
Estamos usando postgresql e Ruby on rails, parece que podemos fazer isso de uma das duas maneiras: modificar trilhos ou adicionar um gatilho ondelete e, em vez disso, fazer uma função pl / pgsql para marcar como excluído. Estou inclinado para o último.
Quanto aos acertos de desempenho, será interessante ver os resultados de EXPLAIN-ANALYZE em tabelas grandes para poucos itens excluídos, bem como muitos itens excluídos.
Em sistemas usados ao longo do tempo que descobri, novos usuários tendem a fazer coisas bobas, como excluir coisas acidentalmente. Portanto, quando as pessoas são novas em uma posição, elas têm todos os direitos de acesso da pessoa anteriormente naquela posição, exceto com experiência zero. Excluir algo acidentalmente e ser capaz de recuperar rapidamente faz com que todos voltem ao trabalho rapidamente.
Mas, como alguém disse, às vezes você pode precisar daquela chave específica de volta por algum motivo, nesse ponto você precisaria realmente excluí-la e recriar os registros (ao desfazer a exclusão e modificar o registro).