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

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

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

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


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

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


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