powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как обеспечить порядковую нумерацию записей клиента?
21 сообщений из 21, страница 1 из 1
Как обеспечить порядковую нумерацию записей клиента?
    #38276927
eurobax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На сервере регистрируются клиенты. БД одна на всех клиентов.
Есть таблица для хранения заявок клиентов - orders.
В таблице заявок есть id autoincrement. Но каждый пользователь хочет видеть свои заявки под своим порядковым номером.
Т.е. вместо глобального id (385654, 385904, 386035..) он хочет видеть 1, 2, 3...

Пока сделано влоб - сделано отдельное поле 'number', при добавлении заявки, идет SELECT MAX(number) FROM orders WHERE userid = <id пользователя>. И далее результат инкрементируется и записывается в качестве number.

Покритикуйте и посоветуйте еще решения.
...
Рейтинг: 0 / 0
Как обеспечить порядковую нумерацию записей клиента?
    #38276986
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eurobaxВ таблице заявок есть id autoincrement. Но каждый пользователь хочет видеть
свои заявки под своим порядковым номером.
И какой идиот показывает ему первичный ключ в качестве номера заявки? Сделай отдельное
поле под номер, которое совсем не является ключом и пусть сами вводят такие числа, какие
хотят.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как обеспечить порядковую нумерацию записей клиента?
    #38277090
eurobax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovСделай отдельное поле под номер, которое совсем не является ключом и пусть сами вводят такие числа, какие
хотят.

Да вы что! Не хотят они вводить вручную, хотят чтобы сервер сам нумеровал )
Поле выделено - называется number (см. выше)
...
Рейтинг: 0 / 0
Как обеспечить порядковую нумерацию записей клиента?
    #38277235
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eurobaxПоле выделено - называется number (см. выше)

А потом один клиент захочет, чтобы нумерация сбрасывалась раз в год, а другой - раз в
месяц. Третьему захочется включить в номер код контрагента. И куда пойдёт твой select max?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как обеспечить порядковую нумерацию записей клиента?
    #38277522
eurobax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Усложнять не надо, задача-то вполне обычная. Просто как ее еще решать?
Лично мне не нравится SELECT MAX(), т.к. перебираются все строки, не так ли?
...
Рейтинг: 0 / 0
Как обеспечить порядковую нумерацию записей клиента?
    #38277548
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eurobaxне так ли?
Может так, а может и не так. Это, знаешь ли, зависит...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как обеспечить порядковую нумерацию записей клиента?
    #38277628
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eurobax,
Если у Вас есть индекс (userID, number) - то перебора всех записей не будет.
...
Рейтинг: 0 / 0
Как обеспечить порядковую нумерацию записей клиента?
    #38277718
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eurobax,

В таблице клиентов добавь поле maxnumber и храни в нем максимальное значение. При добавлении заявки - увеличивай. Просто если клиентов дофига то твой селект неоптимален. А таблицу клиента всеравно пользуешь так или иначе.
...
Рейтинг: 0 / 0
Как обеспечить порядковую нумерацию записей клиента?
    #38277743
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eurobaxНа сервере регистрируются клиенты. БД одна на всех клиентов.
Есть таблица для хранения заявок клиентов - orders.
В таблице заявок есть id autoincrement. Но каждый пользователь хочет видеть свои заявки под своим порядковым номером.
Т.е. вместо глобального id (385654, 385904, 386035..) он хочет видеть 1, 2, 3...

Пока сделано влоб - сделано отдельное поле 'number', при добавлении заявки, идет SELECT MAX(number) FROM orders WHERE userid = <id пользователя>. И далее результат инкрементируется и записывается в качестве number.

Покритикуйте и посоветуйте еще решения.

Вот именно так и надо решать.
Только транзакцию добавления заявки нужно сделать на высшем уровне изоляции.
...
Рейтинг: 0 / 0
Как обеспечить порядковую нумерацию записей клиента?
    #38277747
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eurobax,

Ещё можно сделать таблицу
( pk(user_id, entity_name), last_order_num )

И вместо select max делать инкремент поля last_order_num и выбирать его значение для следующего номера.

Можно, если есть в субд, использовать для этого sequence.
...
Рейтинг: 0 / 0
Как обеспечить порядковую нумерацию записей клиента?
    #38277748
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eurobaxУсложнять не надо, задача-то вполне обычная. Просто как ее еще решать?
Лично мне не нравится SELECT MAX(), т.к. перебираются все строки, не так ли?

Не так.
...
Рейтинг: 0 / 0
Как обеспечить порядковую нумерацию записей клиента?
    #38277870
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiveurobax,

Ещё можно сделать таблицу
( pk(user_id, entity_name), last_order_num )

И вместо select max делать инкремент поля last_order_num и выбирать его значение для следующего номера.

Можно, если есть в субд, использовать для этого sequence.

лучше конечно же написать вменяемый sequence
Причин несколько:
- с последовательностью проще работать всяким сторонним языкам (используя тот же nextval)
- все таки select max from - выделяет номер, но не резвервирует его. И в теории, при работе нескольких пользователей может быть вариант:

Пользователь 1: select max=2
Пользователь 2: select max=2(потому что первый еще ничего не вставил)

Ну и дальнейшие события вы представляете. Придется проверять и при вставке..а там заново выделять, а вдруг кто то уже вставил?:)) Вообщем надо будет писать свой механизм резервирования номеров, проще сразу последовательность написать.
...
Рейтинг: 0 / 0
Как обеспечить порядковую нумерацию записей клиента?
    #38278038
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivМожно, если есть в субд, использовать для этого sequence.

А что, sequence сможет генерировать независимые последовательности для неопределенного числа клиентов? Или предлагается при вставке нового клиента делать очередной create sequence?
...
Рейтинг: 0 / 0
Как обеспечить порядковую нумерацию записей клиента?
    #38278374
eurobax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кот Матроскинeurobax,
Если у Вас есть индекс (userID, number) - то перебора всех записей не будет.

Спасибо, действительно перебора нет, используется индекс.
Но теперь другой вопрос - сильно ли скажется на производительности перестройка такого индекса (userID, number) при вставках?
...
Рейтинг: 0 / 0
Как обеспечить порядковую нумерацию записей клиента?
    #38278377
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eurobaxсильно ли скажется на производительности перестройка такого индекса (userID,
number) при вставках?
Зависит от типа индекса. Деревянные индексы при вставках не перестраиваются.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как обеспечить порядковую нумерацию записей клиента?
    #38278459
eurobax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovЗависит от типа индекса. Деревянные индексы при вставках не перестраиваются.


(userid,number), type:BTREE, unique:No - деревянный?
...
Рейтинг: 0 / 0
Как обеспечить порядковую нумерацию записей клиента?
    #38278475
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eurobaxBTREE, unique:No - деревянный?
http://translate.google.ru/#en/ru/tree
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как обеспечить порядковую нумерацию записей клиента?
    #38278513
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eurobaxСпасибо, действительно перебора нет, используется индекс.
Но теперь другой вопрос - сильно ли скажется на производительности перестройка такого индекса (userID, number) при вставках?
Возбмите и померяйте, насколько это скажется на Вашей системе и Вашей СУБД. Какой смысл обсуждать сферические вставки в вакууме?
...
Рейтинг: 0 / 0
Как обеспечить порядковую нумерацию записей клиента?
    #38278519
eurobax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakoveurobaxBTREE, unique:No - деревянный?
http://translate.google.ru/#en/ru/tree

А!! Я сразу не сообразил, конечно деревянный!
Спс )
...
Рейтинг: 0 / 0
Как обеспечить порядковую нумерацию записей клиента?
    #38280409
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eurobax,

в таблице Юзер (либо еще где) добавьте поле счетчика документов и при вставке нового документа инкрементируйте его
у нас такая нумерация в разных разделах присутствует, поэтому - вынесли индивидуальные счетчики в отдельную таблицу
...
Рейтинг: 0 / 0
Как обеспечить порядковую нумерацию записей клиента?
    #38284842
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверин
Пользователь 1: select max=2
Пользователь 2: select max=2(потому что первый еще ничего не вставил)

Ну и дальнейшие события вы представляете. Придется проверять и при вставке..а там заново выделять, а вдруг кто то уже вставил?:))
Че за???
Там же у него наверняка select max(number) where userId = @ID .
Юзера - разные... максы у них разные, коллизи будут только если от одного юзера несколько одновременных вставок возможно.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как обеспечить порядковую нумерацию записей клиента?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]