Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2010, 03:45   #1
IceExecutioner
Пользователь
 
Аватар для IceExecutioner
 
Регистрация: 04.06.2009
Сообщений: 26
По умолчанию Проблема с параллельной работой клиентов

Доброго времени суток! Ситуация такая:
1. Есть сервер mysql на котором храниться база.
2. В базе есть таблица с номером формата ##### (тип mediumint insigned) и датой добавления данного номера, и какой-то текст. Номера уникальны, при добавлении новой записи он увеличивается на 1.
3. Есть несколько клиентов, работающие с базой параллельно.
4. Пользователь при открытии формы для новой добавлении записи видит номер под которым записи будет добавлена. В случае успеха - запись добавляется, иначе откат. Если несколько пользователе одновременно начнут добавлять записи, то каждый из них на форме видит разный номер, под которым их запись будет добавлена в случае успеха, т.е. первый видет 4, второй 5, третий 6 и т.д. Вопрос как организовать систему взаимодействия, чтобы не было пробелов в последовательности номеров?
IceExecutioner вне форума Ответить с цитированием
Старый 15.11.2010, 09:17   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

В вашем случае — никак!

Либо, Не отображайте номер, а присваивайте его в момент записи в БД (потом можете отобразить) пользователю - "запись добавлена под № ___"

Либо, если отображаете номера, тогда не давайте записывать запись, если есть пропуски... или есть такая запись в таблице. Но тогда непонятно, что делать пользователю. Поясню. User1 начал редактировать. Ему выдался номер 4-ре. user2 начал редактировать. Ему выдался номер 5. user1 ушёл пить чай. User2 нажимает сохранить. Программа определяет, что есть пропуски и сообщает пользователю User2 о том, что сохранить нельзя, т.к. есть пропуски... Что в этом случае делать пользователю User2 ?! Ведь ему надо работат!!

Надеюсь, что это не ключевое (primary key) поле?!!
И вообще, мне кажется, Вы странного хотите! Думайте, как сделать по другому..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.11.2010, 13:46   #3
IceExecutioner
Пользователь
 
Аватар для IceExecutioner
 
Регистрация: 04.06.2009
Сообщений: 26
По умолчанию

Цитата:
Ему выдался номер 5. user1 ушёл пить чай. User2 нажимает сохранить. Программа определяет, что есть пропуски и сообщает пользователю User2 о том, что сохранить нельзя, т.к. есть пропуски
Я, наверное, плохо объяснил: такая ситуация допустима, пускай себе пьёт чай, главное в целом, чтобы не было пропусков, то бишь они могут вносить не по порядку, сначала 5, потом 2, потом 6, затем 1. То есть получается если отсортировать таблицу по возрастанию номеров, все номер должны присутствовать.
З.Ы. Идея с добавлением во время записи мелькала в голове, скорее всего так и сделаю.
IceExecutioner вне форума Ответить с цитированием
Старый 17.11.2010, 14:02   #4
DryRain
 
Аватар для DryRain
 
Регистрация: 17.11.2010
Сообщений: 3
По умолчанию

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

Последний раз редактировалось DryRain; 17.11.2010 в 17:13.
DryRain вне форума Ответить с цитированием
Старый 17.11.2010, 14:57   #5
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

ну и ждем через пару дней вопроса "что делать если пользователь удалит заведенные данные, в результате чего появятся пропуски в последовательности?"

3й вариант DryRain самое то для вашей задачи - общий сиквенс и поиск минимального пропущенного
soleil@mmc вне форума Ответить с цитированием
Старый 17.11.2010, 15:16   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

А почему не просто автоинкрементное поле ?
И какая разница, подряд номера идут или нет ?
Что, при удалении какой-то записи нужно перелопачивать всю БД и устанавливать "циферки по порядочку" ? Бред какой-то...
mihali4 вне форума Ответить с цитированием
Старый 17.11.2010, 16:49   #7
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

соглашусь с mihali4
имхо в 90% все это от того что субд ТС не умеет на лету нумеровать строки (по типу оракловых rownum и т.п.)
еще 10% оставим на дебильную строгую отчетность где нужно вести непрерывный реестр, например, реестр накладных и иметь возможность в любой момент предоставить те же самые данные по указанному номеру (а не все время разные под одним и тем же номером), но имхо это лечится сиквенс + второе поле под номер, который печатается - один минус: следить за непрерывностью придется вручную
soleil@mmc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с работой с файлами на ассемблере ed_ward Помощь студентам 1 04.01.2010 18:29
Проблема с работой программ Девушка_Мария Общие вопросы C/C++ 2 08.12.2009 17:58