:sourcesdir: ../../../../../source

[[soft_deletion]]
===== Soft Deletion

CUBA platform supports soft deletion mode, when the records are not deleted from the database, but instead, marked in a special way, so that they become inaccessible for common use. Later, these records can be either completely removed from the database using some kind of scheduled procedure or restored. 

Soft deletion mechanism is transparent for an application developer, the only requirement is for entity class to implement `SoftDelete` interface. The platform will adjust data operations automatically.

Soft deletion mode offers the following benefits:

* Significantly reduces the risk of data loss caused by incorrect user actions.

* Enables making certain records inaccessible instantly even if there are references to them.
+
Using Orders-Customers data model as an example, let's assume that a certain customer has made several orders but we need to make the customer instance inaccessible for users. This is impossible with traditional hard deletion, as deletion of a customer instance requires either deletion of all related orders or setting to null all references to the customer (meaning data loss). After soft deletion, the customer instance becomes unavailable for search and modification; however, a user can see the name of the customer in the order editor, as deletion attribute is purposely ignored when the related entities are fetched.
+
The standard behavior above can be modified with <<delete_policy,related entities processing policy>>.

The deleted entity instances can be manually restored on the *Restore Deleted Entities* screen available from the *Administration* menu of an application. This functionality is designed only for application administrators supposed to have all <<permissions,permissions>> to all entities, and should be used carefully, so it is recommended to deny access to this screen for simple users.

The negative impact of soft deletion is increase in database size and likely need for additional cleanup procedures.

include::soft_deletion/soft_deletion_usage.adoc[]

include::soft_deletion/delete_policy.adoc[]

include::soft_deletion/soft_deletion_unique_constr.adoc[]

