Один из подходов - создание версий с утверждением версии.
Каждое редактирование создает новую версию объекта модели и его ассоциаций. В любой момент времени существует только одна «текущая» версия любого объекта модели (и его представление в базе данных).
Если два пользователя отправят два отдельных изменения, это приведет к созданию двух «ожидающих» версий.
Администратор одобрил бы изменения, переместив текущую версию в новую «ожидающую» версию. Слияния также могут быть выполнены, но это может быть очень специфично для домена и может привести к конфликтам, поэтому в любом случае сохранение отдельных версий будет разумным.
Есть несколько способов сделать это, и лучший из них будет зависеть от динамики ситуации.
Я бы рекомендовал посмотреть, как работает Git, и попытаться смоделировать вашу систему после этого. Это своего рода указатель на объект модели HEAD с историей ревизий и возможностью перемещения HEAD в разные ревизии. Слияние может также работать аналогично Git.
Надеюсь, это поможет.