Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проблема редактирования данных несколькими пользователями  [new]
orunbek
Member

Откуда: Гималай
Сообщений: 2101
Приветствую всех.
Есть пользователи:
TblUsers:
ID
UserName
...


Также есть таблица сессий пользователей:
TblUserSessions
ID
User_ID
...


Есть таблица определенных данных, скажем,
TblRecords:
ID
...
OpenedSID


При открытии записи для редактирования определенным пользователем, столбец OpenedSID принимает значение текущей сессии пользователя, открывшего его, и при попытке другим пользователем открыть эту запись, выдается соотвествующая информация о том, что она в данный момент редактируется другим пользователем.
После завершения редактирования значение OpenedSID сбрасывается.
И при отображении данных из TblRecords тоже отображается информация о том, кто в данный момент открыл данную запись, примерно запросом следующего вида:
SELECT rec.*, us.UserName
FROM TblRecords rec LEFT OUTER JOIN
TblUserSessions ses INNER JOIN ON rec.OpenedSID=ses.ID
TblUsers us ON ses.User_ID=us.ID

Как вам такой метод? Может быть у кого-нибудь есть идеи получше?
Спасибо всем за внимание и за отзывы, заранее ;)
12 ноя 09, 08:03    [7917732]     Ответить | Цитировать Сообщить модератору
 Re: Проблема редактирования данных несколькими пользователями  [new]
aleks2
Guest
Главная проблема этой схемы, да и всех подобных схем - сбор мусора от отпавших подключений, когда признак блокировки не удаляется.
12 ноя 09, 08:20    [7917750]     Ответить | Цитировать Сообщить модератору
 Re: Проблема редактирования данных несколькими пользователями  [new]
orunbek
Member

Откуда: Гималай
Сообщений: 2101
Это да, у админа будет доступ для сброса данного значения, и еще job, который периодически проверяет "подвисшие" подключения и чистить мусор за ними
12 ноя 09, 08:24    [7917756]     Ответить | Цитировать Сообщить модератору
 Re: Проблема редактирования данных несколькими пользователями  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
ADO & SQL Server , блокировка записей
12 ноя 09, 08:30    [7917771]     Ответить | Цитировать Сообщить модератору
 Re: Проблема редактирования данных несколькими пользователями  [new]
orunbek
Member

Откуда: Гималай
Сообщений: 2101
pkarklin,

хмм... интересное решение, т.е. не будет столбца OpenedSID, а будет отдельная таблица (TblOpenDocs)
в котором хранится информация о том, кто и какую запись открыл?
и при открытии добавляется запись в таблицу TblOpenDocs, а после закрытия удаляется?
правильно ли я понял?
12 ноя 09, 08:43    [7917803]     Ответить | Цитировать Сообщить модератору
 Re: Проблема редактирования данных несколькими пользователями  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
orunbek,

Гм... А разве по коду это непонятно?! Там всего несколько инструкций...
12 ноя 09, 08:46    [7917813]     Ответить | Цитировать Сообщить модератору
 Re: Проблема редактирования данных несколькими пользователями  [new]
orunbek
Member

Откуда: Гималай
Сообщений: 2101
pkarklin,

я не ас ;)) поэтому и уточняю
а по сравнению с предложенным вариантом чем лучше будет?
тем что можно легко отслеживать "зависшие" процессы?
12 ноя 09, 09:24    [7917952]     Ответить | Цитировать Сообщить модератору
 Re: Проблема редактирования данных несколькими пользователями  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
orunbek,

Зачем создавать дополнительную таблицу сессий, если сервер "свою" имеет. Ну и самоочистка.
12 ноя 09, 11:18    [7918749]     Ответить | Цитировать Сообщить модератору
 Re: Проблема редактирования данных несколькими пользователями  [new]
LexMinsk
Member

Откуда: Republic of Belarus
Сообщений: 451
А если использовать "блокировки на ресурс" (APPLOCK_MODE, APPLOCK_TEST, sp_getapplock, sp_releaseapplock). Сам ими пока не пользовался. Может кто пользовался, так подскажите, как они работают? Корректно? Можно их использовать?
12 ноя 09, 11:51    [7919035]     Ответить | Цитировать Сообщить модератору
 Re: Проблема редактирования данных несколькими пользователями  [new]
orunbek
Member

Откуда: Гималай
Сообщений: 2101
pkarklin,

несколько пользователей могут подключаться к базе под одним логином, скажем пользователи работают с базой через web-клиент, j2me-клиент, в данной ситуации разделение пользователей идет на стороне клиента (частично), частично на стороне сервера, в зависимости от клиента
поэтому есть таблица юзеров и таблица сессий, таблица сессий нужна также для ведения истории изменений данных в некоторых таблицах
я через эту же таблицу и хотел реализовать "резервацию" записей для редактирования
в том числе можно узнать, кто именно на данный момент редактирует ("зарезервировал") запись
12 ноя 09, 11:58    [7919114]     Ответить | Цитировать Сообщить модератору
 Re: Проблема редактирования данных несколькими пользователями  [new]
MCTS
Guest
aleks2

Главная проблема этой схемы, да и всех подобных схем - сбор мусора от отпавших подключений, когда признак блокировки не удаляется.

Это обходится таким способом - строка вяжется не к пользователю, а к его сессии. при любом отлогинивании сессия закрывается и строка освобождается. это такоей финт, завязанный на архитектуру скула.
12 ноя 09, 12:06    [7919191]     Ответить | Цитировать Сообщить модератору
 Re: Проблема редактирования данных несколькими пользователями  [new]
orunbek
Member

Откуда: Гималай
Сообщений: 2101
MCTS
aleks2

Главная проблема этой схемы, да и всех подобных схем - сбор мусора от отпавших подключений, когда признак блокировки не удаляется.

Это обходится таким способом - строка вяжется не к пользователю, а к его сессии. при любом отлогинивании сессия закрывается и строка освобождается. это такоей финт, завязанный на архитектуру скула.

можете более подробно описать, пожалуйста?
12 ноя 09, 12:21    [7919334]     Ответить | Цитировать Сообщить модератору
 Re: Проблема редактирования данных несколькими пользователями  [new]
aleks2
Guest
MCTS
aleks2

Главная проблема этой схемы, да и всех подобных схем - сбор мусора от отпавших подключений, когда признак блокировки не удаляется.

Это обходится таким способом - строка вяжется не к пользователю, а к его сессии. при любом отлогинивании сессия закрывается и строка освобождается. это такоей финт, завязанный на архитектуру скула.


Ёпрст! Если ты такой умный, почему твоя фамилия не Bill Gates?

Мелкие проблемы
1. В MS SQL нету понятия сессия. Есть подключение... но программа-клиент (ADO, например) могет открывать вторичные подключения само... Веселья из это проистекает немерянно...

2. Само оно освобождается только при открытой транзакции - но при открытой транзакции париться с доп. блокировками - глупо.
12 ноя 09, 12:28    [7919399]     Ответить | Цитировать Сообщить модератору
 Re: Проблема редактирования данных несколькими пользователями  [new]
MCTS
Guest
Тут должно быть

К сообщению приложен файл (SimultaneousEditing.zip - 42Kb) cкачать
12 ноя 09, 12:29    [7919413]     Ответить | Цитировать Сообщить модератору
 Re: Проблема редактирования данных несколькими пользователями  [new]
orunbek
Member

Откуда: Гималай
Сообщений: 2101
MCTS,

здесь с использованием блокировок на уровне базы
хотелось бы без блокировок, просто на уровне клиентского приложения, интересна сама идея в контексте MS-SQL, кто как решал?
мм... идея отдельной таблицы чёт не нравится, есть у кого еще идеи?
13 ноя 09, 14:09    [7926098]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить