There are three approaches to handling a concurrent update situation:
# _Last commit wins_. This is the situation described above, where Dave wipes out Shahla's changes. This is what we're doing most of the time in our apps, and it does not involve any detection of a concurrent update.
# _First commit wins_. In this scenario, Dave would come back from lunch, attempt to save his changes, and see an error message "Someone else has changed the data. Your changes have not been saved". Dave's changes would not be saved to the DB. This does require detection of a concurrent update.
# _Merge_. Here, Dave would be presented with a message telling him that someone else had changed the data, and would be provided with a UI to give them a way of merging his changes with Shahla's changes. This does require detection of a concurrent update.
Unless there's a clear business requirement for the merge option, I think we need to take the second approach, "first commit wins". In order to pursue this approach, we do need to have a mechanism for detecting concurrent updates. Which leads to...
|