![]() |
|
Модераторы: Akella |
![]()
|
|
| MoreHate |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 22.3.2005 Репутация: нет Всего: нет |
Есть простенькая бухгалтерская программка. Есть такая вещь как "расход".
Расход = списания брака + денежная выручка Если немного абстрагироваться, то получаются такие таблички: Списания: ID | Date | WareID | Sum Выручки: ID | Date | Sum Выручка в день может быть только одна, а вот списаний - куча. Так вот, нужно регулярно выводить таблицу Расхода в таком виде Дата | Выручка | Сумма списаний за день | Общая сумма Вопрос. Как лучше это осуществить? Если по "правилам", то нужно все вычислять на лету. Т.е. если мы сделаем выборку хотя бы за месяц, то уже будет считаться 30 сумм таблицы "Списание". Можно сделать быстрее, но уж больно криво, как мне кажется. Ввести таблицу "Расход" в которой хранить данные за каждый день и обновлять её после каждого действия. Примерно так: ID | Date | Gain | AllowancesSum | Sum Я весь в сомнениях |
|||
|
||||
| Akina |
|
||||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 3 Всего: 454 |
Это называется "переопределенная база данных" и более чем настоятельно не рекомендуется.
Сколько записей за день? сто тысяч? миллион? что, всего сотня? бред какой... даже не заморачивайся - просто сделай индексированым поле даты, и все будет летать мухой. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
| MoreHate |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 22.3.2005 Репутация: нет Всего: нет |
Спасибо. Так и сделаю.
|
|||
|
||||
| beroal |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 18.1.2003 Где: Украина Репутация: нет Всего: 3 |
Считай не лету. Подоптимизировать можешь когда программа начнёт реально тормозить, но вероятность этого невелика.
|
|||
|
||||
| chief39 |
|
|||
![]() карманная тигра ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: нет Всего: 77 |
Если возникнет необходимость ускорения расчётов - можешь потом устроить дублирование данных(тысызыть скэшированные подсчёты). И использовать их, пеиодически обновляя. Но это только для действий без обратной связи.
Например для отчётности месячной или ещё чего похуже. Но без необходимости - не стоит. подсчитывай на лету. Кэшировать надо лишь в быстрых онлайн системах, где тысячи запросов на пересчёт могут замедлить отклик. Вообще и то и то - практика нормальная, но второй вариант требует хорошего проектирования и аккуратности. да и то, при необходимости -------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
|||
|
||||
| MoreHate |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 22.3.2005 Репутация: нет Всего: нет |
Я думаю, это не будет оффтопом. Все-таки тема та же.
Никак не могу сообразить, как можно соединить данные с двух таблиц по датам. Тут какая-то группировка хитрая? |
|||
|
||||
| bas |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 446 Регистрация: 14.8.2002 Где: Молдова, Кишинев Репутация: нет Всего: 2 |
А join не пробовал использовать, в нем наглядней соединения.
|
|||
|
||||
| beroal |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 18.1.2003 Где: Украина Репутация: нет Всего: 3 |
Я думаю, лучше подзапросами. Сначала сгруппировать и суммировать, чтобы дата в обоих таблицах стала уникальной, потом соединять.
|
||||||
|
|||||||
| MoreHate |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 22.3.2005 Репутация: нет Всего: нет |
beroal, не выполняется.
Или ошибка в запросе, или это особенности синтаксиса Firebird. IbExpert выдал Dynamic SQL Error. SQL error code = -104. Token unknown - line 2, char 8. SELECT. Пойду почитаю мануал. Я с подзапросами слабо знаком. |
|||
|
||||
| beroal |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 212 Регистрация: 18.1.2003 Где: Украина Репутация: нет Всего: 3 |
Я написал для MS SQL. В FireBird-е наверное можно выкрутиться, но лень думать. Я хотел дать общее представление об идее.
Это сообщение отредактировал(а) beroal - 25.6.2006, 15:14 |
|||
|
||||
| MoreHate |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 22.3.2005 Репутация: нет Всего: нет |
Хм, в FireBird нет временных таблиц.
2Модератор: можно перекинуть вторую половину топика в форум по FireBird? Я думаю, что там помогут. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 1 Всего: 538 |
Тогда уж весь топик, т.к. вторая половина без первой, будет непонятна. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Alex |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 7 Всего: 162 |
Какие временные таблицы, какие подзапросы, вы что людиииии....
Запрос:
Результат
Это сообщение отредактировал(а) Alex - 30.6.2006, 10:06 -------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
||||||
|
|||||||
![]()
|
| Правила форума "Interbase" | |
|
|
Обязательно указание: 1. Версию InterBase (Firebird, Yaffil) 2. Способа доступа (ADO, BDE, IBX и т.д.)
Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Firebird, Interbase | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |