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

Откуда:
Сообщений: 42
Как правильно правильно реализовать логику.

Есть документы. Номер документа увеличивается в зависимости от номера склада. У каждого склада своя нумерация документов.
2 июн 18, 13:37    [21463043]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация документов  [new]
Васелина
Member

Откуда:
Сообщений: 42
Как правильнее использовать триггер, скалярную функцию или что то другое?
2 июн 18, 14:30    [21463085]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация документов  [new]
Васелина
Member

Откуда:
Сообщений: 42
или хранимую процедуру
2 июн 18, 14:35    [21463090]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация документов  [new]
982183
Member

Откуда: VL
Сообщений: 3353
Васелина
Номер документа увеличивается в зависимости от номера склада.

У номера документа есть префикс, зависящий от номера склада?
3 июн 18, 11:31    [21463940]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация документов  [new]
iap
Member

Откуда: Москва
Сообщений: 46983
https://social.technet.microsoft.com/wiki/ru-ru/contents/articles/10056.microsoft-sql-server.aspx
3 июн 18, 13:04    [21464100]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация документов  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8714
iap
https://social.technet.microsoft.com/wiki/ru-ru/contents/articles/10056.microsoft-sql-server.aspx


пи#дец, простите...
4 июн 18, 00:44    [21464969]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация документов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31371
SIMPLicity_
iap
https://social.technet.microsoft.com/wiki/ru-ru/contents/articles/10056.microsoft-sql-server.aspx


пи#дец, простите...
Это восхищение или критика? :-)

Это экстремально лучший вариант, подходит, если при высоких требованиях к производительности и функциональности. Он при этом в общем простой и лаконичный, просто в статье разнесено на несколько частей, из за этого кажется большим. Единственный минус - используется CLR.

Конечно, если у ТС 10 пользователей, можно просто сделать таблицу счётчиков, и в процедуре или триггере присваивать новый номер.
4 июн 18, 08:56    [21465214]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация документов  [new]
iap
Member

Откуда: Москва
Сообщений: 46983
SIMPLicity_
iap
https://social.technet.microsoft.com/wiki/ru-ru/contents/articles/10056.microsoft-sql-server.aspx


пи#дец, простите...
В многопользовательской среде вообще всё непросто...
4 июн 18, 10:24    [21465472]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация документов  [new]
d7i
Member

Откуда:
Сообщений: 507
можно просто сделать таблицу счётчиков, и в процедуре или триггере присваивать новый номер.

Именно сделать таблицу счетчиков и в ТРИГГЕРЕ присваивать новый номер ПРИ СОЗДАНИИ НОВОГО ДОКУМЕНТА.

Я этот метод использую почти 20 лет и никаких проблем.
4 июн 18, 11:17    [21465771]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация документов  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
d7i
можно просто сделать таблицу счётчиков, и в процедуре или триггере присваивать новый номер.

Именно сделать таблицу счетчиков и в ТРИГГЕРЕ присваивать новый номер ПРИ СОЗДАНИИ НОВОГО ДОКУМЕНТА.

Я этот метод использую почти 20 лет и никаких проблем.

ох эти романтики... 20 лет ничему их жизнь не учит

ps капс это важность ваше подчёркивает?
4 июн 18, 11:25    [21465798]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация документов  [new]
iap
Member

Откуда: Москва
Сообщений: 46983
d7i
можно просто сделать таблицу счётчиков, и в процедуре или триггере присваивать новый номер.

Именно сделать таблицу счетчиков и в ТРИГГЕРЕ присваивать новый номер ПРИ СОЗДАНИИ НОВОГО ДОКУМЕНТА.

Я этот метод использую почти 20 лет и никаких проблем.
Я тоже. Но при этом я прекрасно понимаю, что это говнокод.
Потому что полюбому надо SELECTом получить текущий номер из таблицы, потом UPDATEом его изменить, да ещё в другую таблицу вставить.
Если не блокировать таблицы в монопольном режиме доступа, то рано или поздно возникнут накладки в нумерации.
Особенно если пользователей несколько сотен или тысяч.
В то же время такой уровень изоляции транзакции приведёт к катастрафическому падению производительности.
4 июн 18, 11:25    [21465802]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация документов  [new]
invm
Member

Откуда: Москва
Сообщений: 9351
iap
Если не блокировать таблицы в монопольном режиме доступа, то рано или поздно возникнут накладки в нумерации.
Таблицы-то зачем? Достаточно строку в таблице, хранящей счетчики.
4 июн 18, 11:56    [21465924]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация документов  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8714
Картинка с другого сайта.

PS Мне всегда хватало identity
PPS Для всего остального я мутил свои счётчики ... наверное я хреновый проектировщик
4 июн 18, 12:03    [21465963]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация документов  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
SIMPLicity_,

identity не прикрутишь для разнородных номеров ака "Номер документа увеличивается в зависимости от номера склада"

а так да, таблица со складами, масками и последним значением, при добавление блокировать вычитку строки счётчика и увеличивать при успешном окончании или просто увеличивать и забить на стабильный +1(чаще всего требование ничем не аргументируется кроме как "хочу и всё тут") Из радостей - блокировка строки счётчика до окончания вставки вашего документа, или если отказаться от +1 то только на момент генерации номера, а всавилось или нет дело не обяхательное
4 июн 18, 12:12    [21466015]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация документов  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8714
TaPaK
SIMPLicity_,

identity не прикрутишь для разнородных номеров ака "Номер документа увеличивается в зависимости от номера склада"

а так да, таблица со складами, масками и последним значением, при добавление блокировать вычитку строки счётчика и увеличивать при успешном окончании или просто увеличивать и забить на стабильный +1(чаще всего требование ничем не аргументируется кроме как "хочу и всё тут") Из радостей - блокировка строки счётчика до окончания вставки вашего документа, или если отказаться от +1 то только на момент генерации номера, а всавилось или нет дело не обязательное


Да, наверное.

... и вариант invm (с отдельной таблицей) мне нравится больше... в силу снижения нагрузок. Особенно при распределённых системах.

Может быть, для этих случаев сиквенсы - "луч добра", но...
4 июн 18, 12:20    [21466052]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация документов  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
SIMPLicity_
TaPaK
SIMPLicity_,

identity не прикрутишь для разнородных номеров ака "Номер документа увеличивается в зависимости от номера склада"

а так да, таблица со складами, масками и последним значением, при добавление блокировать вычитку строки счётчика и увеличивать при успешном окончании или просто увеличивать и забить на стабильный +1(чаще всего требование ничем не аргументируется кроме как "хочу и всё тут") Из радостей - блокировка строки счётчика до окончания вставки вашего документа, или если отказаться от +1 то только на момент генерации номера, а всавилось или нет дело не обязательное


Да, наверное.

... и вариант invm (с отдельной таблицей) мне нравится больше... в силу снижения нагрузок. Особенно при распределённых системах.

Может быть, для этих случаев сиквенсы - "луч добра", но...

ну в общем это и есть вариант с отдельной таблицей
4 июн 18, 12:22    [21466061]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация документов  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8714
Васелина
или хранимую процедуру


Возвращаясь к теме.
Если добавление идёт через единственную хранимую процедуру,- то лучше (на мой взгляд) логику в ней реализовать. И избегать вставок "кроме как через неё".

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

Жизнь можно облегчить грамотно сформировав индекс. Я бы, наверное, построил НЕкластерный индекс по склад - номер. Кластерный (такой же) был бы идеален, но на больших данных частых вставках, подозреваю, он будет слишком часто обновляться; а в том как работает механизм перестроения кластерного индекса я не сильно разбираюсь ...

Если я где-то не прав (по теме топика) - поправьте....
4 июн 18, 12:30    [21466106]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация документов  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
SIMPLicity_,

автор
Жизнь можно облегчить грамотно сформировав индекс. Я бы, наверное, построил НЕкластерный индекс по склад - номер. Кластерный (такой же) был бы идеален, но на больших данных частых вставках, подозреваю, он будет слишком часто обновляться; а в том как работает механизм перестроения кластерного индекса я не сильно разбираюсь ...

наша песня хороша, начинай сначала
4 июн 18, 12:33    [21466122]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация документов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31371
d7i
Я этот метод использую почти 20 лет и никаких проблем.
Первое же нагруженное приложение - и проблемы будут.
4 июн 18, 13:43    [21466457]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация документов  [new]
msLex
Member

Откуда:
Сообщений: 8093
SIMPLicity_
Я бы, наверное, построил НЕкластерный индекс по склад - номер. Кластерный (такой же) был бы идеален, но на больших данных частых вставках, подозреваю, он будет слишком часто обновляться; а в том как работает механизм перестроения кластерного индекса я не сильно разбираюсь ...

А как работает "механизм перестроения НЕкластерного индекса" вы разбираетесь?
НЕкластерный не нужно обновлять?
А после обновления НЕкластерного не нужно обновлять кластерный/кучу?
4 июн 18, 13:54    [21466507]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация документов  [new]
aleks222
Member

Откуда:
Сообщений: 985
Попроектирую и я тоже...

1. Идентити - как главный номер и суррогатный ключ.
2. Строковое поле, куда можно вводить любой номер. Можно генерировать автоматом в процедуре (типа, нет номера - генерируем, причем совсем не обязательно в момент ввода документа - можно постобработкой) или вводить/менять ручками - как ужо сделаете.
4 июн 18, 14:18    [21466602]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация документов  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50862
Васелина
Как правильнее использовать триггер, скалярную функцию или что то другое?

Правильнее всего использовать бумажный "журнал регистрации документов", который и будет выполнять задачу сериализации при генерации номеров. На каждом складе - свой.
4 июн 18, 14:27    [21466656]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация документов  [new]
iap
Member

Откуда: Москва
Сообщений: 46983
SIMPLicity_
Если добавление идёт через единственную хранимую процедуру,- то лучше (на мой взгляд) логику в ней реализовать. И избегать вставок "кроме как через неё".
Кто мешает запустить процедуру одновременно в десяти коннектах?
invm
iap
Если не блокировать таблицы в монопольном режиме доступа, то рано или поздно возникнут накладки в нумерации.
Таблицы-то зачем? Достаточно строку в таблице, хранящей счетчики.
Какая разница, если в любом случае речь об общем ресурсе, к которому необходимо организовать последовательный доступ?
4 июн 18, 14:52    [21466804]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация документов  [new]
invm
Member

Откуда: Москва
Сообщений: 9351
iap
Какая разница, если в любом случае речь об общем ресурсе, к которому необходимо организовать последовательный доступ?
Разница большая, - потому что общий ресурс не таблица, а строка этой таблицы.
4 июн 18, 15:01    [21466867]     Ответить | Цитировать Сообщить модератору
 Re: Нумерация документов  [new]
iap
Member

Откуда: Москва
Сообщений: 46983
invm
iap
Какая разница, если в любом случае речь об общем ресурсе, к которому необходимо организовать последовательный доступ?
Разница большая, - потому что общий ресурс не таблица, а строка этой таблицы.
Всё равно же надо ждать, пока он освободится!
4 июн 18, 15:05    [21466886]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить