How to properly handle deleting an object in a business system?

Published: Feb. 2, 2017, 3:11 p.m.

You can hard-delete an object, you can also use a boolean flag "deleted", you can use a datetime field called "deleted_at". You can also have a record per each deletion. Finally, you can just use events.

What's best?