powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Поштучно или по диапазонам?
8 сообщений из 8, страница 1 из 1
Поштучно или по диапазонам?
    #34314728
olzhas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть билеты каждый билет имеет свой номер. Билеты упакованныв пачки. Пачки упакованны в Коробки. Вообщем получается дерево.
Для этого дерева можно сделать таблицу.

Код: plaintext
box, pack, ticketNo
Это простой вариант.
В данной ситуации из-за огромного количества билетов получаеются огромные таблицы. И при перемещении этих билетов также получаться огромные таблицы. Но написать сам фунционал довльно таки просто.

Есть другой вариант. хранить билеты диапазонами.
Код: plaintext
box, pack, BegNo, EndNo
Но так как диапазоны часто прерываются, то в одной пачке могут быть несколько диапазонов. Но все равно размер данных таблиц в 10-ки раз уменьшается.
Хранение более удобное, но вот проблема пачки могут вскрываться и разрезаться. Из-за этого фунционал для перемещения билетов сложный.

Какой вариант на ваш взгляд лудше применить?
...
Рейтинг: 0 / 0
Поштучно или по диапазонам?
    #34315532
rommy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ведем учет бланков строгой отчетности. На складе - учитываем диапазонами (одна табл.), использованные/выданные - поштучно (вторая табл.)
...
Рейтинг: 0 / 0
Поштучно или по диапазонам?
    #34315592
ZeusTheTrueGod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю что лучше хранить в одной таблице. В таблицу надо добавить индексы, учитывая, что в таблице 3 поля, всего можно сделать индексы по (box) (pack) (No) (box pack) ( box no) (pack box)
(pack no) (no box) (no pack) (box pack no) (box no pack) (pack box no) (pack no box) (no box pack) (no pack box), итого 15 индексов, и какой бы вы не использовали запрос, будет выполнятся поиск по индексу вместо full scan. Если же самому разбивать таблицу на несколько только потому, что она очень большая, то фактически вы пытаетесь решать ту задачу, для которой предназначен sql-сервер, вместо него самого. Вряд ли это получится лучше
...
Рейтинг: 0 / 0
Поштучно или по диапазонам?
    #34316212
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olzhasЕсть билеты каждый билет имеет свой номер. Билеты упакованныв пачки. Пачки упакованны в Коробки. Вообщем получается дерево.
Для этого дерева можно сделать таблицу.

Код: plaintext
box, pack, ticketNo
Это простой вариант.
В данной ситуации из-за огромного количества билетов получаеются огромные таблицы. И при перемещении этих билетов также получаться огромные таблицы. Но написать сам фунционал довльно таки просто.

Есть другой вариант. хранить билеты диапазонами.
Код: plaintext
box, pack, BegNo, EndNo
Но так как диапазоны часто прерываются, то в одной пачке могут быть несколько диапазонов. Но все равно размер данных таблиц в 10-ки раз уменьшается.
Хранение более удобное, но вот проблема пачки могут вскрываться и разрезаться. Из-за этого фунционал для перемещения билетов сложный.

Какой вариант на ваш взгляд лудше применить?

Пока с каждым конкретным билетом не связаны никакие факты, лучше оперировать коробками, пачками с диапазонами №№. При переходе от оптовых операций (работаем с целыми коробками) к мелкооптовым (работаем с целыми пачками) и наконец к розничным (пачку вскрыли, билеты уже не находятся в пачке, распределяются поштучно), можно сгенерировать сначала для каждой коробки, потом пачки и наконец для каждого билета в диапазоне отдельную запись в БД.

Когда коробка или пачка вскрывается, она по сути перестаёт существовать как объект учёта.

Таблица может быть такой.

ID объекта.
Тип объекта: коробка, пачка, <может быть промежуточные уровни>, билет.
Первый номер в диапазоне.
Последний номер в диапазоне.
(У билета первый и последний момера совпадают).
Ссылка на ID Коробки.
Ссылка на ID Пачки.
Ссылка на ID Объекта промежуточного уровня.

Вместо введения поля "Тип объекта" можно создать отдельные таблицы для объектов каждого типа.
...
Рейтинг: 0 / 0
Поштучно или по диапазонам?
    #34317800
olzhas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 mcureenab
Сделал почти по вашему совету.
создал таблицу tTicketRange
Код: plaintext
IdTicketRange, box, pack,begNo,endNo, ParentPack

Сделал таблицы меремещения (Master-details)
tMoveHead
Код: plaintext
IdMove, IdFrom, IdTo, DateMove, ....

tMoveTable
Код: plaintext
IdMove, IdTicketRange

Если перемещается коробка то испольщуем все диапазоны этой коробки
Если используется пачка то используется один диапазон (т.е. idTicketRange)
Если пачка вскрывается то запускаем процедуру разрезания пачки которая вставляет в tTicketRange 3 Сточки
Пример когда в пачку 1-1000, режим от 200 до 599
Код: plaintext
1.
2.
3.
4.
idTicketRange, box, pack, begno,endno, ParentPack
 1 ,                   1 ,     1 ,       1 ,       1000 ,  NULL
 2 ,                   1 ,    NULL,  1 ,       199 ,     1  //Новая запись 
 3 ,                   1 ,    NULL,  200 ,    599 ,     1  //Новая запись
 4 ,                   1 ,    NULL,  600 ,    1000 ,    1 //Новая запись

По ParentPack можно узнать разрывалась пачка или нет.
Как вам такой вариант?
...
Рейтинг: 0 / 0
Поштучно или по диапазонам?
    #34323567
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пользуйтесь поиском, здесь уже не один раз обсуждались проблемы учета по диапазонам.

Кратко повторю свое мнение, хранить номера в БД необходимо только поштучно. Вносить первичку и выдавать отчетность по диапазонами, т.е. раскрывать/схлопывать штучный учет в диапазоны.

Из собственного опыта все попытки написать "алгебру" для работы с диапазонами к хорошему результату не приводят. Вы просто не столкнулись еще со всеми проблемами такого учета.
...
Рейтинг: 0 / 0
Поштучно или по диапазонам?
    #34323827
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EstetsПользуйтесь поиском, здесь уже не один раз обсуждались проблемы учета по диапазонам.

Любое решение будет иметь недостатки. Нужно сравнивать проблемы того и другого подхода.
Ведь на бумаге никто не составляет список всех серийных №№ билетов в пачке, так зачем это делать в электронной БД?
Собственно в решении предлагается комбинированный подход. Когда с диапазонами возникают реальные сложности, при том что выгода становится незначительной, мы переходим к штучному учёту.

EstetsИз собственного опыта все попытки написать "алгебру" для работы с диапазонами к хорошему результату не приводят.

Видимо плохо писали. Задача конечно нетривиальная но в определённых случаях вполне решаемая.
...
Рейтинг: 0 / 0
Поштучно или по диапазонам?
    #34335648
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab
Любое решение будет иметь недостатки. Нужно сравнивать проблемы того и другого подхода.
Ведь на бумаге никто не составляет список всех серийных №№ билетов в пачке, так зачем это делать в электронной БД?
Собственно в решении предлагается комбинированный подход. Когда с диапазонами возникают реальные сложности, при том что выгода становится незначительной, мы переходим к штучному учёту.

Все написанное ИМХО. olzhas попросил совета "их есть у меня". Проблема "огромного количества билетов - огромные таблицы" на мой взгляд решается просто докупанием еще одного гига памяти серверу БД (100$). А вот проблема проектирования, написания и отладки механизма работы с диапазонами, не решается так просто. У нас в конторе это заняло примерно три человеко-месяца, примерно = 3000$ (3000$ х 3, если учитывать накладные расходы).
mcureenab
EstetsИз собственного опыта все попытки написать "алгебру" для работы с диапазонами к хорошему результату не приводят.
Видимо плохо писали. Задача конечно нетривиальная но в определённых случаях вполне решаемая.
Я не сказал, что ее невозможно решить, при разработке было реализовано три алгоритма обработки таких данных. Первые два опирались на работу с диапазонами в разных вариантах, но не усторили заказчика, в одном случае невозможно было получить остатки номеров на дату отличную от текущей и провести операцию "задним числом", в другом случае не устроила производительность, в результате пришлось раелизовывать третий вариант развертывая диапазоны в штуки (две человеко-недели = 500$). ;-)
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Поштучно или по диапазонам?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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