| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > Нужен совет, по организации одной из таблиц БД |
| Автор: Delphist 16.9.2009, 09:38 |
| Вообщем хочу посоветоваться в одном вопросе. Для простоты понимания моего вопроса для начала кратко опишу ряд таблиц БД ответственные за склад. Таблицы: 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'ом. Но хотелось бы послушать Ваши рекомендации. |
| Автор: Deniz 16.9.2009, 11:23 |
| ИМХО, на клиенте считать остаток не есть гуд, Остаток товара по партии рассчитывается как SKLAD_RAW_PARTY.INCOME - sum(SKLAD_EXPENSE.EXPENSE). Это обычный select, который не должен сильно напрячь сервер, индексы же есть. Остался один вопрос:какой задачи? Получить остаток товара, с разбивкой по партиям, на складе/по всем складам? Мне больше нравится 1 вариант. |
| Автор: former 16.9.2009, 11:26 |
| ИХМО: Работа с БД должна быть возможна и без клиента. |
| Автор: pseud 16.9.2009, 12:19 | ||
| подход номер 3: создать вьюху и ее юзать:
|