Это должно определяться потребностями приложения. Я сделал это в обе стороны. У меня есть некоторые приложения, которые должны поддерживать отмену, поскольку стоимость удаления строки - и каскадное удаление, вызванное этим - слишком дороги, чтобы ее не иметь. Обычно, однако, приложения, которые я сделал, требуют, чтобы пользователь подтвердил удаление, а затем просто сделал так, как просил пользователь. В некоторых случаях вы должны удалить данные по соображениям конфиденциальности. То есть, если пользователь просит удалить его, вам нужно действительно удалить его, а не просто пометить как не текущий. В других случаях (например, транзакции, связанные с налогами) могут существовать причины для сохранения данных в устаревшем состоянии до тех пор, пока они не потребуются по закону. У меня есть приложения, которые подходят к обеим категориям.
Различные стратегии могут быть использованы в том случае, если вам нужно хранить «архивные» данные. В зависимости от того, должен ли он быть немедленно доступным, вы можете отправить его в архивные таблицы, которые регулярно хранятся, резервируются и очищаются. Если есть необходимость отменить, вы можете сохранить его в текущей таблице и просто пометить его, установив флаг. Это действительно зависит от сложности вашей схемы, требований приложения и личных предпочтений в некоторой степени.