Как организовать работу с картами клиентов (БД) в веб?

Есть сайт (веб приложение на php/python/asp), который работает с БД.
В БД хранятся данные, например медицинские карты клиентов.

Менеджеру в браузере загружается такая карта. И он может её редактировать, изменить ФИО...
Менеджеров много.
В результате, если два менеджера одновременно откроют одну карту, а потом её сохранят, то работа одного из них пропадет т.к. будет перезаписана менеджером, кто выполнил сохранение позднее.

В жизни существует одна карта. И такой ситуации обычно не возникает.
В GITе такая ситуация называется конфликтом, требующим разрешения.
В облачном хранилище (например mail) файл дублируется и к его имени добавляется conflicted_copy.

Как реализовать это в веб?
То есть нужно сделать так, чтобы когда один менеджер открыл карту, она стала недоступна для второго.
А когда закрыл - доступна.

У меня есть варианты решения этой проблемы (свои "велосипеды"), но у каждого есть свои недостатки.
Как организовать работу с картами клиентов (БД) в веб? Как это делается в крупных проектах/системах, как это принято делать?
  • Вопрос задан
  • 129 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
Почитайте про оптимистические блокировки.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
deepblack
@deepblack
Как реализовать это в веб?
То есть нужно сделать так, чтобы когда один менеджер открыл карту, она стала недоступна для второго.
А когда закрыл - доступна.


Добавить в таблицу БД дополнительные поля:
locked BOOLEAN
locked_user_id BIGINT
locked_at TIMESTAMP


Выставлять признак блокировки на время редактирования, id пользователя который заблокировал запись, и время когда это (блокировка) произошло.
Для остальных на уровне приложения оставлять возможность работать с заблокированной записью в режиме чтения.
Добавить в админку возможность принудительно снять блокировку, а так-же периодически (по расписанию) снимать блокировку.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы