|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
15.11.2010, 03:45 | #1 |
Пользователь
Регистрация: 04.06.2009
Сообщений: 26
|
Проблема с параллельной работой клиентов
Доброго времени суток! Ситуация такая:
1. Есть сервер mysql на котором храниться база. 2. В базе есть таблица с номером формата ##### (тип mediumint insigned) и датой добавления данного номера, и какой-то текст. Номера уникальны, при добавлении новой записи он увеличивается на 1. 3. Есть несколько клиентов, работающие с базой параллельно. 4. Пользователь при открытии формы для новой добавлении записи видит номер под которым записи будет добавлена. В случае успеха - запись добавляется, иначе откат. Если несколько пользователе одновременно начнут добавлять записи, то каждый из них на форме видит разный номер, под которым их запись будет добавлена в случае успеха, т.е. первый видет 4, второй 5, третий 6 и т.д. Вопрос как организовать систему взаимодействия, чтобы не было пробелов в последовательности номеров? |
15.11.2010, 09:17 | #2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
В вашем случае — никак!
Либо, Не отображайте номер, а присваивайте его в момент записи в БД (потом можете отобразить) пользователю - "запись добавлена под № ___" Либо, если отображаете номера, тогда не давайте записывать запись, если есть пропуски... или есть такая запись в таблице. Но тогда непонятно, что делать пользователю. Поясню. User1 начал редактировать. Ему выдался номер 4-ре. user2 начал редактировать. Ему выдался номер 5. user1 ушёл пить чай. User2 нажимает сохранить. Программа определяет, что есть пропуски и сообщает пользователю User2 о том, что сохранить нельзя, т.к. есть пропуски... Что в этом случае делать пользователю User2 ?! Ведь ему надо работат!! Надеюсь, что это не ключевое (primary key) поле?!! И вообще, мне кажется, Вы странного хотите! Думайте, как сделать по другому.. |
16.11.2010, 13:46 | #3 | |
Пользователь
Регистрация: 04.06.2009
Сообщений: 26
|
Цитата:
З.Ы. Идея с добавлением во время записи мелькала в голове, скорее всего так и сделаю. |
|
17.11.2010, 14:02 | #4 |
Регистрация: 17.11.2010
Сообщений: 3
|
1-й вариант, как и было сказано выше, не показывать пользователю номер, и при записи брать из сиквенса следующий по порядку.
(на мой взгляд самый оптимальный) 2-й, при вводе информации не отображать этот номер, а после сохранения выдавать пользователю сообщение, что его запись легла в таблицу под таким-то номером. Варианты, если пользователю очень важно видеть этот номер именно при вводе данных(хотя зачем...): 3-й, давать пользователю сохранять как есть, но если предыдущий отменил свою запись и организовался пробел, следующему пользователю который хочет записать данные, давать наименьший несуществующий номер из табл.(вариант если не нужно отображение реальных данных кто за кем открывал форму ввода данных, хотя и тут можно выйти из положения записывая дату и время). 4-й вариант, при сохранении с номером который идет не попорядку, предупреждать пользователя, что номер изменился на такой-то и делать записи по порядку. Соответственно и тому пользователю который пошел пить чай а потом ввел оставшуюся информацию и сохранился, так же сообщать что номер стал вот такой.
Бегемот - это странный медведь...
Последний раз редактировалось DryRain; 17.11.2010 в 17:13. |
17.11.2010, 14:57 | #5 |
SQL-коддинг
Участник клуба
Регистрация: 16.01.2009
Сообщений: 1,192
|
ну и ждем через пару дней вопроса "что делать если пользователь удалит заведенные данные, в результате чего появятся пропуски в последовательности?"
3й вариант DryRain самое то для вашей задачи - общий сиквенс и поиск минимального пропущенного |
17.11.2010, 15:16 | #6 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
А почему не просто автоинкрементное поле ?
И какая разница, подряд номера идут или нет ? Что, при удалении какой-то записи нужно перелопачивать всю БД и устанавливать "циферки по порядочку" ? Бред какой-то... |
17.11.2010, 16:49 | #7 |
SQL-коддинг
Участник клуба
Регистрация: 16.01.2009
Сообщений: 1,192
|
соглашусь с mihali4
имхо в 90% все это от того что субд ТС не умеет на лету нумеровать строки (по типу оракловых rownum и т.п.) еще 10% оставим на дебильную строгую отчетность где нужно вести непрерывный реестр, например, реестр накладных и иметь возможность в любой момент предоставить те же самые данные по указанному номеру (а не все время разные под одним и тем же номером), но имхо это лечится сиквенс + второе поле под номер, который печатается - один минус: следить за непрерывностью придется вручную |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблема с работой с файлами на ассемблере | ed_ward | Помощь студентам | 1 | 04.01.2010 18:29 |
Проблема с работой программ | Девушка_Мария | Общие вопросы C/C++ | 2 | 08.12.2009 17:58 |