From what I understand, it's generally best practice to design a system with user access to delete "records" to only hide/disable that record and not actually delete it. This typically ends up being (example) a flag in a database like "enabled" which gets changed to 0 when a user "deletes" a record. This doesn't just pertain to databases but things such as web systems, files and so on.
Is this generally true, and are there any good write-ups/papers on this matter?