just a thought, not sure if it was mentioned:
whenever an entity, say a contact is deleted, all of its associated data is also removed from the database. if accidental deletion takes place, we must rely on a backup. this could be problematic due to a number of other changes made to the database concurrently.
what if we added a 'deleted' field on each table and simply omitted those records in normal every day queries?
thus, if a need arose to recover a lost entity, the db administrator would simply have to uncheck the deleted state and on the records and all of its relations. there could be some type of a trash folder where all removed entities could be controlled and with a click "recovered". following on this thought, i would imagine that every class implemented some kind of a recover function which accepted only id as an argument
best
