Varia
Дата: 24.01.2010 19:04:48
Пишу клиент-серверное приложение, возник вопрос:
как должна реагировать программа, если один пользователь редактирует запись, а другой её в это время удаляет?
Пишу на С#, база данных — MS SQL Server
Заранее спасибо.
ZhV
Дата: 25.01.2010 00:24:36
Если ваш проект на самых ранних стадиях, могу предложить один вполне проверенный "защищенный" вариант.
Запись не удаляется физически, а "аннулируется" специальным флажком (рекомендую название поля - isdeleted) - что-то типа "корзины". Из корзины всегда можно вытащить ошибочно удаленные обьекты.
Ну и раз в неделю/месяц - "большая приборка" корзинного мусора админовскими средствами по специальному регламенту.
Этот вариант очень хорош для приложений с юридически жестким регламентом - например поступающие заявки нельзя удалить - только мотивированно аннулировать.
Isdeleted-вариант - единственно возможный, если речь идет о справочниках - констрэйнты просто не дадут удалить позицию с многочисленными ссылками на всякие архивные записи состоявшихся в былые времена операций. Например, какой-то клиент больше "не клиент" => isdeleted=true - и он больше не будет мозолить глаза во всяких выпадающих списках, но все "старые связи" останутся целы.
Самый известный пример такого решения - 1С.