powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Совет по работе с БД
12 сообщений из 12, страница 1 из 1
Совет по работе с БД
    #38494902
Im_Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Есть данные по движению товаров на магазинах. Приходы (приход от поставщика, внутренний приход, инвентаризация ...) и Расходы (продажи, списания, возвраты...) Что бы вычислить остаток на магазине - суммируются все приходные линии и от них отнимаются все расходные. За все время начиная с того времени как были введены БД. Это 4 года. Уникальных строк (магазин-товар) получается каждый день около миллиона. Весь этот расчет длится долго (около часа, что бы рассчитать остатки на 1 день)
Работа с этими данными такова, что каждый сотрудник офиса может, использую браузер, задать параметры и выгрузить эти остатки. При этом каждый раз будут складываться все приходные и расходные линии.
Как я понял такой алгоритм из-за того что приходы и расходы могут проводиться задним числом. И остатки на одну и туже дату могут быть разными. Поэтому каждый раз идет полный пересчет.
Есть идея – рассчитать и сохранить остаток на каждый день. И пересчитывать их только за период который еще не закрыт ( после закрытия периода, остатки уже не меняются).
Вопрос: на сколько это правильно? По сути, идет дублирование данных. А как я понял, этого не любят делать в БД.
Такая же история с продажами. В одной таблице хранятся сами продажи в шт или кг. В другой цены, в третей скидки. Для оперирования продажами каждый раз идет преобразование к виду:
КодМагазинаКодТовараКол-воСуммаСкидкаСуммаСоСкидкой10015501040200710015001001400
Я думаю, что получу прирост в скорости расчета если буду хранить отдельно эти вычисления продаж, так как в дальнейшем идет многократное обращение к этим данным, и каждый раз не придется вычислять продажи.
С БД только знакомлюсь. Подскажите на сколько правильно хранить подобные «вычисления» в отдельных таблицах с точки зрения баз данных? Или в этих случаях поступают как-то по-другому?
...
Рейтинг: 0 / 0
Совет по работе с БД
    #38494941
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Im_Max Это 4 года. Уникальных строк (магазин-товар) получается каждый день около миллиона. Весь этот расчет длится долго (около часа, что бы рассчитать остатки на 1 день) Чаще всего хватает правильных индексов.

Im_Max Есть идея – рассчитать и сохранить остаток на каждый день. И пересчитывать их только за период который еще не закрыт ( после закрытия периода, остатки уже не меняются).Да, если у тебя есть понятия открытых-закрытых периодов, то вполне можно хранить таблицу с итогами "за период". И детальный расчет уже делать на ее основе.
С другой стороны, если закрытые периоды не могут меняться - можно просто скидывать эти данные в "архивную" таблицу и пусть они там себе лежат и служат источником для детальных отчетов, а данные по незакрытому периоду пусть живут в отдельной "оперативной" таблице. Меньше данных - быстрее работа.

Im_Max Вопрос: на сколько это правильно? По сути, идет дублирование данных. А как я понял, этого не любят делать в БД. Смотря какое дублирование. Промежуточные итоги это не дублирование, а промежуточные итоги.
...
Рейтинг: 0 / 0
Совет по работе с БД
    #38494992
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Im_Max Подскажите на сколько правильно
Подхода два;
1. хранить и поддерживать текущий остаток. От него вычислять остаток на любую дату.
позволяет легко менять все задним числом
2. хранить остатки за закрытый период - день или месяц или ...
используется чаще в банках

выбор за вами
...
Рейтинг: 0 / 0
Совет по работе с БД
    #38495417
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_модIm_Max Подскажите на сколько правильно
1. хранить и поддерживать текущий остаток. От него вычислять остаток на любую дату.
позволяет легко менять все задним числом


При этом варианте сложно отловить получаюшийся при правке задним числом промежуточный отрицательный остаток.
...
Рейтинг: 0 / 0
Совет по работе с БД
    #38495641
Im_Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо всем за совет. То что и хотел узнать. Теперь пойду к IT.
П.С. проблема с отрицательным остатком на самом деле есть. :)
...
Рейтинг: 0 / 0
Совет по работе с БД
    #38495847
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кот МатроскинПри этом варианте сложно отловить получаюшийся при правке задним числом промежуточный отрицательный остаток.
Сложно, но можно. Правка задним числом не очень часто - потенциально - уменьшили приход, увеличили расход
...
Рейтинг: 0 / 0
Совет по работе с БД
    #38495880
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Im_MaxБольшое спасибо всем за совет. То что и хотел узнать. Теперь пойду к IT.
П.С. проблема с отрицательным остатком на самом деле есть. :)Так ты еще и не из IT?
...
Рейтинг: 0 / 0
Совет по работе с БД
    #38496067
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NafIm_MaxБольшое спасибо всем за совет. То что и хотел узнать. Теперь пойду к IT.
П.С. проблема с отрицательным остатком на самом деле есть. :)Так ты еще и не из IT?
это рационализатор
...
Рейтинг: 0 / 0
Совет по работе с БД
    #38496068
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_модIm_Max Подскажите на сколько правильно
Подхода два;
1. хранить и поддерживать текущий остаток. От него вычислять остаток на любую дату.
позволяет легко менять все задним числом
2. хранить остатки за закрытый период - день или месяц или ...
используется чаще в банках

выбор за вами
есть и вариант 3
хранить остатки на все периоды, допускать изменения задним числом, при изменении - все остатки в будущем пересчитывать.
...
Рейтинг: 0 / 0
Совет по работе с БД
    #38496483
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan Durakесть и вариант 3
хранить остатки на все периоды, допускать изменения задним числом, при изменении - все остатки в будущем пересчитывать.
Это и есть мой вар. 2
...
Рейтинг: 0 / 0
Совет по работе с БД
    #38500094
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_модIvan Durakесть и вариант 3
хранить остатки на все периоды, допускать изменения задним числом, при изменении - все остатки в будущем пересчитывать.
Это и есть мой вар. 2
вариант 2 - много остатков. Вариант 3 - один актуальный остаток
...
Рейтинг: 0 / 0
Совет по работе с БД
    #38500122
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan DurakВариант 3 - один актуальный остаток
так это вар.1 Не вижу 3-х вариантов
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Совет по работе с БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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