Когда дело доходит до блокировки записи, мы пытаемся придумать рекомендуемый шаблон проектирования для нашей команды. Типичная школа мысли выглядит примерно так: 1. Пользователь выбирает запись из списка. 2. Заблокируйте запись с помощью идентификатора пользователя. 3. Загрузите заблокированную запись (без блокировки, значит кто-то вас опередил).
Я что-то упускаю или это единственный способ сделать это? ((В нашем случае оптимистическая блокировка окажется обременительной и запутанной для конечных пользователей. Правки часто бывают весьма существенными.))

Деталь, которая может усложнить администрирование вашего решения, - это избавление от блокировок после сбоев или сбоев подключения. Вот где действительно заключается компромисс между оптимистичной и пессимистической блокировкой. Ручное объединение или повторение правок, когда оптимистическая блокировка терпит неудачу, - это боль, но устранение после сбоев в пессимистичных и устойчивых моделях блокировки создает свои собственные головные боли (как вам подробно скажет любой, кто поддерживал пользователей систем учета с повсеместной поддержкой в 90-х годах. возможность)
Один из ответов - использовать механизмы вашей СУБД для управления транзакциями и параллелизмом: возьмите запись с помощью SELECT FOR UPDATE или любого другого синтаксиса, который подходит вашей среде и уровню изоляции. Если один из ваших клиентов выходит из строя или отключается, транзакция откатывается и блокировка снимается.
В среде без установления соединения, такой как Интернет, или в среде, где соединения часто теряются и восстанавливаются, модель на основе сеанса с тайм-аутом сеанса также может работать:
Таким образом, блокировка снимается по истечении сеанса. Отсутствие необходимости вручную снимать блокировки после сбоев и некоторая устойчивость к проблемам с клиентом / подключением. Однако для кодирования требуется немного больше работы.
Здорово, Белл. Спасибо за это. Не думал о тайм-аутах блокировки. Однако это имеет смысл, когда вы думаете о других системах, таких как ticketMaster.