I would save both records in a table (old and new) with an additional status field (for example, active, pending, deleted, rejected) (or whatever you think is necessary).
Then I would create a view that shows only active records (used for most purposes), and one that shows only pending records (using a supervisor approval page for a page).
I would create a trigger in the table to ensure that only one record is active at a time. Therefore, if the supervisor changes the record from the pending to the active, it will take the old record and change it to the deletion status. If the supervisor rejects the change, it will transition to the reject state.
To keep the table nimble (you donβt need to keep old statuses permanently), I would have a task that is performed at night to delete all records in the delete or reject status.
Hlgem source share