|
|
|
Совет по работе с БД
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Есть данные по движению товаров на магазинах. Приходы (приход от поставщика, внутренний приход, инвентаризация ...) и Расходы (продажи, списания, возвраты...) Что бы вычислить остаток на магазине - суммируются все приходные линии и от них отнимаются все расходные. За все время начиная с того времени как были введены БД. Это 4 года. Уникальных строк (магазин-товар) получается каждый день около миллиона. Весь этот расчет длится долго (около часа, что бы рассчитать остатки на 1 день) Работа с этими данными такова, что каждый сотрудник офиса может, использую браузер, задать параметры и выгрузить эти остатки. При этом каждый раз будут складываться все приходные и расходные линии. Как я понял такой алгоритм из-за того что приходы и расходы могут проводиться задним числом. И остатки на одну и туже дату могут быть разными. Поэтому каждый раз идет полный пересчет. Есть идея – рассчитать и сохранить остаток на каждый день. И пересчитывать их только за период который еще не закрыт ( после закрытия периода, остатки уже не меняются). Вопрос: на сколько это правильно? По сути, идет дублирование данных. А как я понял, этого не любят делать в БД. Такая же история с продажами. В одной таблице хранятся сами продажи в шт или кг. В другой цены, в третей скидки. Для оперирования продажами каждый раз идет преобразование к виду: КодМагазинаКодТовараКол-воСуммаСкидкаСуммаСоСкидкой10015501040200710015001001400 Я думаю, что получу прирост в скорости расчета если буду хранить отдельно эти вычисления продаж, так как в дальнейшем идет многократное обращение к этим данным, и каждый раз не придется вычислять продажи. С БД только знакомлюсь. Подскажите на сколько правильно хранить подобные «вычисления» в отдельных таблицах с точки зрения баз данных? Или в этих случаях поступают как-то по-другому? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2013, 06:25 |
|
||
|
Совет по работе с БД
|
|||
|---|---|---|---|
|
#18+
Im_Max Это 4 года. Уникальных строк (магазин-товар) получается каждый день около миллиона. Весь этот расчет длится долго (около часа, что бы рассчитать остатки на 1 день) Чаще всего хватает правильных индексов. Im_Max Есть идея – рассчитать и сохранить остаток на каждый день. И пересчитывать их только за период который еще не закрыт ( после закрытия периода, остатки уже не меняются).Да, если у тебя есть понятия открытых-закрытых периодов, то вполне можно хранить таблицу с итогами "за период". И детальный расчет уже делать на ее основе. С другой стороны, если закрытые периоды не могут меняться - можно просто скидывать эти данные в "архивную" таблицу и пусть они там себе лежат и служат источником для детальных отчетов, а данные по незакрытому периоду пусть живут в отдельной "оперативной" таблице. Меньше данных - быстрее работа. Im_Max Вопрос: на сколько это правильно? По сути, идет дублирование данных. А как я понял, этого не любят делать в БД. Смотря какое дублирование. Промежуточные итоги это не дублирование, а промежуточные итоги. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2013, 08:29 |
|
||
|
Совет по работе с БД
|
|||
|---|---|---|---|
|
#18+
Im_Max Подскажите на сколько правильно Подхода два; 1. хранить и поддерживать текущий остаток. От него вычислять остаток на любую дату. позволяет легко менять все задним числом 2. хранить остатки за закрытый период - день или месяц или ... используется чаще в банках выбор за вами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2013, 09:33 |
|
||
|
Совет по работе с БД
|
|||
|---|---|---|---|
|
#18+
_модIm_Max Подскажите на сколько правильно 1. хранить и поддерживать текущий остаток. От него вычислять остаток на любую дату. позволяет легко менять все задним числом При этом варианте сложно отловить получаюшийся при правке задним числом промежуточный отрицательный остаток. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2013, 13:10 |
|
||
|
Совет по работе с БД
|
|||
|---|---|---|---|
|
#18+
Большое спасибо всем за совет. То что и хотел узнать. Теперь пойду к IT. П.С. проблема с отрицательным остатком на самом деле есть. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2013, 14:46 |
|
||
|
Совет по работе с БД
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинПри этом варианте сложно отловить получаюшийся при правке задним числом промежуточный отрицательный остаток. Сложно, но можно. Правка задним числом не очень часто - потенциально - уменьшили приход, увеличили расход ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2013, 16:38 |
|
||
|
Совет по работе с БД
|
|||
|---|---|---|---|
|
#18+
Im_MaxБольшое спасибо всем за совет. То что и хотел узнать. Теперь пойду к IT. П.С. проблема с отрицательным остатком на самом деле есть. :)Так ты еще и не из IT? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2013, 16:58 |
|
||
|
Совет по работе с БД
|
|||
|---|---|---|---|
|
#18+
NafIm_MaxБольшое спасибо всем за совет. То что и хотел узнать. Теперь пойду к IT. П.С. проблема с отрицательным остатком на самом деле есть. :)Так ты еще и не из IT? это рационализатор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2013, 18:47 |
|
||
|
Совет по работе с БД
|
|||
|---|---|---|---|
|
#18+
_модIm_Max Подскажите на сколько правильно Подхода два; 1. хранить и поддерживать текущий остаток. От него вычислять остаток на любую дату. позволяет легко менять все задним числом 2. хранить остатки за закрытый период - день или месяц или ... используется чаще в банках выбор за вами есть и вариант 3 хранить остатки на все периоды, допускать изменения задним числом, при изменении - все остатки в будущем пересчитывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2013, 18:48 |
|
||
|
Совет по работе с БД
|
|||
|---|---|---|---|
|
#18+
Ivan Durakесть и вариант 3 хранить остатки на все периоды, допускать изменения задним числом, при изменении - все остатки в будущем пересчитывать. Это и есть мой вар. 2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2013, 09:41 |
|
||
|
Совет по работе с БД
|
|||
|---|---|---|---|
|
#18+
_модIvan Durakесть и вариант 3 хранить остатки на все периоды, допускать изменения задним числом, при изменении - все остатки в будущем пересчитывать. Это и есть мой вар. 2 вариант 2 - много остатков. Вариант 3 - один актуальный остаток ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2013, 14:30 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38496483&tid=1541040]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
23ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
| others: | 11ms |
| total: | 133ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...