|
|
|
Доход-Расход=Остаток. Как хранить и вычислять?
|
|||
|---|---|---|---|
|
#18+
В моей базе в одной из таблиц будет операция, указанная в сабже. Можно сказать что вся таблица будет посвящена именно одной только этой операции (поля: Дата, Доход, Расход, Остаток (влияет на результат вычисления следующей строки). Причем нужно иметь возможность изменять остаток на любую дату, при этом конечный остаток должен соответственно пересчитываться. Отчетный период - один месяц, то есть при начале следующего месяца будет браться уже сохраненный остаток на конец предыдущего. Вопрос состоит в том, что делать с полем Остаток. Высчитывать его процедурой и хранить в таблице? Считать SQL запросом? Переложить вычисление на клиента и опять же писать в базу? Посоветуйте плиз, что грамотнее и быстрее. Спасиб :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 16:08 |
|
||
|
Доход-Расход=Остаток. Как хранить и вычислять?
|
|||
|---|---|---|---|
|
#18+
Шаблон: Ресурсы накопления С уважением, Naf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 16:55 |
|
||
|
Доход-Расход=Остаток. Как хранить и вычислять?
|
|||
|---|---|---|---|
|
#18+
Посмотрите эту ссылку и еще один топик автора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2009, 17:14 |
|
||
|
Доход-Расход=Остаток. Как хранить и вычислять?
|
|||
|---|---|---|---|
|
#18+
Спасибо всем за ссылки. Посмотрел, но это немного не то. Моя задача - это не бухучет на предприятии и не движение ТМЦ. Мне нужно знать и видеть остаток на счете на КАЖДЫЙ божий день. Я пишу программу по учету личных финансов, а в таких делах очень важно видеть остатки на каждый день и изменять их на любую дату, единственное, что это все только внутри одного месяца. По окончании месяца остаток на счете переходит на следующий месяц и предыдущий месяц в расчетах участвовать уже не будет. Вот мне и интересно, при среднем количестве записей по счету 300 штук ( не тысяч, а именно штук) в месяц, что лучше - вычислять или хранить прямо в базе в явном виде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2009, 02:27 |
|
||
|
Доход-Расход=Остаток. Как хранить и вычислять?
|
|||
|---|---|---|---|
|
#18+
TrabuditorВот мне и интересно, при среднем количестве записей по счету 300 штук ( не тысяч, а именно штук) в месяц, что лучше - вычислять или хранить прямо в базе в явном виде.Даже если Вы будете хранить их в текстовом файле, с такими объемами на современных компьютерах можно смело все расчёты делать с нуля, лет эдак 100. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2009, 02:51 |
|
||
|
Доход-Расход=Остаток. Как хранить и вычислять?
|
|||
|---|---|---|---|
|
#18+
Cha, вы знаете, существуют разработчики, которые и с таким объемом данных умудряются делать жутко тормозные программы, а потом их еще и продавать . Хотелось бы избежать такого и сделать изначально все правильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2009, 03:13 |
|
||
|
Доход-Расход=Остаток. Как хранить и вычислять?
|
|||
|---|---|---|---|
|
#18+
Предлагаю: 1. Остаток из базы выкинуть. и не хранить его в явном виде. 2. Приход и расход - это одно поле. + - приход, минус - расход. 3. Любая модификация за любую дату - просто добавление записи. (даже для исправления ошибок) 4. Сделать алгоритм рассчета остатков на каждый день. (Возможно закэшировать результаты помесячно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2009, 08:15 |
|
||
|
Доход-Расход=Остаток. Как хранить и вычислять?
|
|||
|---|---|---|---|
|
#18+
1. Остаток из базы выкинуть. и не хранить его в явном виде Думаю, что я так и сделаю, но хранить все же буду только остатки на начало и на конец месяца. 2. Приход и расход - это одно поле. + - приход, минус - расход. В этом случае придется добавлять поле идентификатора операции (приход или расход) для нормальной работы с отчетами... 3. Любая модификация за любую дату - просто добавление записи. (даже для исправления ошибок) С этим согласен полностью, так и хотел. Сделать алгоритм рассчета остатков на каждый день. (Возможно закэшировать результаты помесячно) Вот тут мне интересен следующий момент. Допустим, я закрываю месяц, у меня образовался остаток на конец этого месяца, который переходит на начало следующего. Кэшируем предыдущий месяц (спускаем его в архив путем создания дублирующей таблицы, которую можно просматривать, но нельзя изменять данные). Вопрос в том, что будет если мне вдруг понадобится отредактировать остаток на дату в уже закрытом периоде. Я так примерно представляю, что нужно этот период каким-то образом перенести в редактируемую форму, исправить остаток на дату - соответственно исправится остаток на конец этого периода и на начало следующего. Как это сделать - мне неясно. Если же тупо править остаток в текущем месяце, то архивные данные будут некорректны. Как вот тут поступить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2009, 08:28 |
|
||
|
Доход-Расход=Остаток. Как хранить и вычислять?
|
|||
|---|---|---|---|
|
#18+
Trabuditor... Если же тупо править остаток в текущем месяце, то архивные данные будут некорректны. Как вот тут поступить? Основная идея такова: 1. Идут операции за месяц. (без учета предыдущих) 2. Результаты операций за месяц ты кэшируешь (если MS SQL - то можно попытаться выкурить материализованную вьюшку) 3. Итого: табличка с данными остатков по месяцам. и табличка с конкретными операциями в этом месяце. 4. МЫСЛЬ!!! даже за 100 лет * 12 месяцев = 1200 всего записей! так что их можно и каждый раз суммировать. Если неочень внятно написал - моя мысль - не хранить наростающие итоги. а хранить некие суммы операций за месяц. Таким образом для получения остатков на любое число надо будет ссуммировать все предыдущие месяцы (это будет остаток на начало месяца) + ссуммировать все операции конкретного месяца до нужной даты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2009, 14:58 |
|
||
|
Доход-Расход=Остаток. Как хранить и вычислять?
|
|||
|---|---|---|---|
|
#18+
Об этом как раз мой первый пост, честно содрана идея 1С С уважением, Naf ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2009, 15:38 |
|
||
|
Доход-Расход=Остаток. Как хранить и вычислять?
|
|||
|---|---|---|---|
|
#18+
При таком объеме- вычислять, конечно. Еще, судя по вашим словам, клиенту захочется независимо от количества введеных данных, вычислять остатки к заданной дате. То есть можно ввести данные за целый месяц, а считать к середине месяца. Так что этот счет должен инициироваться с клиента. Я бы предпочел сделать процедуру на сервере. Ее можно вызывать с клиента, а также использовать (в другой процедуре) при переходе в следующий период (начальное состояние + операции => конечное сосотяние; потом вводим новый период и конечное состояние уже старого периода переходит в начальное состояние нового периода). да, и еще- Подумайте, прежде чем делать архивные таблицы, перекидывать туда инфу и пр. Это усложнение логики с одной стороны; ну а с другой стороны современные СУБД переносят достаточно большие объемы данных, не теряя производительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2009, 17:27 |
|
||
|
Доход-Расход=Остаток. Как хранить и вычислять?
|
|||
|---|---|---|---|
|
#18+
Trabuditor.. но хранить все же буду только остатки на начало и на конец месяца. остатки на конец месяца = начальное состояние следующего. Имеет смысл хранить только одно. Начальное, как правило. Trabuditor Вопрос в том, что будет если мне вдруг понадобится отредактировать остаток на дату в уже закрытом периоде. Я так примерно представляю, что нужно этот период каким-то образом перенести в редактируемую форму, исправить остаток на дату - соответственно исправится остаток на конец этого периода и на начало следующего. Как это сделать - мне неясно. Если же тупо править остаток в текущем месяце, то архивные данные будут некорректны. Как вот тут поступить?Остаток вообще не надо править, имхо. Надо править операцию, а потом перевычислять остаток. Поэтому, если нет "архивных" таблиц, а информация находится в одной таблице в которой есть идентификатор периода (месяца), то делать перевычисление легче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2009, 17:36 |
|
||
|
|

start [/forum/topic.php?fid=32&tid=1543190]: |
0ms |
get settings: |
11ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
166ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 489ms |

| 0 / 0 |
