Soft deletes aren't really that great. What people want is to preserve data and not delete it, however at the same time they don't want that 'deleted' data present in the active workset. If you use deleted flags, your database will become bigger and bigger, but your workset will stay the same, which can degrade performance over time.
So instead, use delete triggers with an archived catalog. In the delete trigger you simply insert the row deleted into an archive table in the catalog for the archived data
This means that your database is as big as your working set, and you still don't lose any data.