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

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

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

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

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

В таблице клиентов добавь поле maxnumber и храни в нем максимальное значение. При добавлении заявки - увеличивай. Просто если клиентов дофига то твой селект неоптимален. А таблицу клиента всеравно пользуешь так или иначе.
...
Рейтинг: 0 / 0
29.05.2013, 06:51
    #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
29.05.2013, 06:57
    #38277747
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обеспечить порядковую нумерацию записей клиента?
eurobax,

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

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

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

Не так.
...
Рейтинг: 0 / 0
29.05.2013, 09:54
    #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
29.05.2013, 10:58
    #38278038
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обеспечить порядковую нумерацию записей клиента?
MasterZivМожно, если есть в субд, использовать для этого sequence.

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

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


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

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

в таблице Юзер (либо еще где) добавьте поле счетчика документов и при вставке нового документа инкрементируйте его
у нас такая нумерация в разных разделах присутствует, поэтому - вынесли индивидуальные счетчики в отдельную таблицу
...
Рейтинг: 0 / 0
04.06.2013, 11:21
    #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]