| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Firebird, Interbase > Структура базы данных |
| Автор: MoreHate 23.6.2006, 06:35 |
| Есть простенькая бухгалтерская программка. Есть такая вещь как "расход". Расход = списания брака + денежная выручка Если немного абстрагироваться, то получаются такие таблички: Списания: ID | Date | WareID | Sum Выручки: ID | Date | Sum Выручка в день может быть только одна, а вот списаний - куча. Так вот, нужно регулярно выводить таблицу Расхода в таком виде Дата | Выручка | Сумма списаний за день | Общая сумма Вопрос. Как лучше это осуществить? Если по "правилам", то нужно все вычислять на лету. Т.е. если мы сделаем выборку хотя бы за месяц, то уже будет считаться 30 сумм таблицы "Списание". Можно сделать быстрее, но уж больно криво, как мне кажется. Ввести таблицу "Расход" в которой хранить данные за каждый день и обновлять её после каждого действия. Примерно так: ID | Date | Gain | AllowancesSum | Sum Я весь в сомнениях |
| Автор: MoreHate 23.6.2006, 08:31 |
| Спасибо. Так и сделаю. |
| Автор: beroal 23.6.2006, 10:02 |
| Считай не лету. Подоптимизировать можешь когда программа начнёт реально тормозить, но вероятность этого невелика. |
| Автор: chief39 23.6.2006, 11:59 |
| Если возникнет необходимость ускорения расчётов - можешь потом устроить дублирование данных(тысызыть скэшированные подсчёты). И использовать их, пеиодически обновляя. Но это только для действий без обратной связи. Например для отчётности месячной или ещё чего похуже. Но без необходимости - не стоит. подсчитывай на лету. Кэшировать надо лишь в быстрых онлайн системах, где тысячи запросов на пересчёт могут замедлить отклик. Вообще и то и то - практика нормальная, но второй вариант требует хорошего проектирования и аккуратности. да и то, при необходимости |
| Автор: MoreHate 24.6.2006, 09:19 | ||
Я думаю, это не будет оффтопом. Все-таки тема та же.
Никак не могу сообразить, как можно соединить данные с двух таблиц по датам. Тут какая-то группировка хитрая? |
| Автор: bas 24.6.2006, 11:42 |
| А join не пробовал использовать, в нем наглядней соединения. |
| Автор: beroal 24.6.2006, 13:15 | ||||||
Я думаю, лучше подзапросами. Сначала сгруппировать и суммировать, чтобы дата в обоих таблицах стала уникальной, потом соединять.
|
| Автор: MoreHate 25.6.2006, 12:57 |
| beroal, не выполняется. Или ошибка в запросе, или это особенности синтаксиса Firebird. IbExpert выдал Dynamic SQL Error. SQL error code = -104. Token unknown - line 2, char 8. SELECT. Пойду почитаю мануал. Я с подзапросами слабо знаком. |
| Автор: beroal 25.6.2006, 15:03 |
| Я написал для MS SQL. В FireBird-е наверное можно выкрутиться, но лень думать. Я хотел дать общее представление об идее. |
| Автор: MoreHate 25.6.2006, 16:44 |
| Хм, в FireBird нет временных таблиц. 2Модератор: можно перекинуть вторую половину топика в форум по FireBird? Я думаю, что там помогут. |
| Автор: LSD 25.6.2006, 19:06 | ||
Тогда уж весь топик, т.к. вторая половина без первой, будет непонятна. |
| Автор: Alex 30.6.2006, 09:56 | ||||||
Какие временные таблицы, какие подзапросы, вы что людиииии....
Запрос:
Результат
|