![]() |
|
|
![]()
|
|
| Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 1 Всего: 3 |
Вообщем хочу посоветоваться в одном вопросе.
Для простоты понимания моего вопроса для начала кратко опишу ряд таблиц БД ответственные за склад. Таблицы: SKLAD_RAW - хранит данные о сырье которое имеется на складе SR_ID - идентификатор записи, primary key SKLAD_ID - идентификатор склада берется из внешней, foreign key RAW_ID - идентификатор сырья берется из внешней таблицы, foreign key ... SKLAD_RAW_PARTY - хранит партии сырья SRP_ID - идентификатор записи, primary key SR_ID - ключ таблицы SKLAD_RAW, foreign key INCOME - приход PRICE - цена партии за един. DATE - дата прихода ... SKLAD_EXPENSE - хранит расход по партиям SE_ID - идентификатор записи, primary key SRP_ID - ключ таблицы SKLAD_RAW_PARTY, foreign key EXPENSE - расход Date - дата расхода ... Проблема в том что в организации данных по приходу, расходу и остатку я увидел 2 подхода решения задачи: 1) Когда структура таблица в самом простом ее видете соответствует той, что я привел. Далее мы заводим хранимую процедуру, которая в качестве входных данных имеет SKLAD_ID и RAW_ID, а в качестве выходных возвращает полную инфу о сырье его приходе, расходе и остатке. 2) Второй же подходе отличается от первого, что остаток мы вычисляем не с помощью хранимой процедуры, а на клиенте например в OnCalcFields и плюс ко всему расчитанный остаток мы физически храним в таблице SKLAD_RAW_PARTY, для чего туда добавляем дополнительное поле REMAINDER Встал вопрос какой подход лучше использовать. В первом мне нравится то, что не нужны дополнительные поля и на клиенте нет лишних расчетов, второй же мне нравиться тем, что для каждой партии уже есть готовый остаток, который из любого места программы можно получить простым select'ом. Но хотелось бы послушать Ваши рекомендации. Это сообщение отредактировал(а) Delphist - 16.9.2009, 09:40 -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 8 Всего: 44 |
ИМХО, на клиенте считать остаток не есть гуд,
Остаток товара по партии рассчитывается как SKLAD_RAW_PARTY.INCOME - sum(SKLAD_EXPENSE.EXPENSE). Это обычный select, который не должен сильно напрячь сервер, индексы же есть. Остался один вопрос:какой задачи? Получить остаток товара, с разбивкой по партиям, на складе/по всем складам? Мне больше нравится 1 вариант. -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
| former |
|
|||
![]() MEMS Expert ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1166 Регистрация: 1.3.2006 Где: Россия Репутация: 7 Всего: 17 |
ИХМО: Работа с БД должна быть возможна и без клиента.
-------------------- Достаточно снизить уровень мышления, чтобы иные почувствовали почву под ногами. |
|||
|
||||
| pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 16 Всего: 40 |
подход номер 3:
создать вьюху и ее юзать:
-------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |