Форум: "Базы";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];
ВнизАлгоритм реализации расчетов на основе БД Найти похожие ветки
← →
КаПиБаРа © (2004-12-20 08:38) [0]Предполагается создать такой механизм:
Массив данных -> Схема данных -> Расчетная схема -> Схема результатов -> Массив результатов.
Каждый из объектов является таблицей БД (кроме массива результатов, который должен рассчитываться динамически пока неизвестно как).
Массив данных:
Num – номер;
Val – значение.
Схема данных:
Num – номер (связан с Num из массива данных).
Расчетная схема:
Num2 – номер;
Koef – коэффициент на которое умножается значение с номером Num из массива данных;
Num – номер из Схемы данных (он же номер из массива данных).
Схема результатов:
Num2 –номер (связан с Num2 из расчетной схемы).
* Все остальные поля, не имеющие отношения к делу, я опустил.
Мы должны «пропустить» Массив данных, описанный в Схеме данных через Расчетную схему и получить Массив результатов, описанный в Схеме результатов.
Массив результатов представлен следующим образом:
Num2 – номер
Val2 – значение
Val2 получается следующим образом:
Сумма всех Val из Массива данных умноженных на Koef из Расчетной схемы у которых совпадают номера Num.
Предполагается подавать различные Массивы данных на вход цепочки Схема данных -> Расчетная схема -> Схема результатов и получать Массивы результатов.
Вопрос состоит в том, каким образом реализовать расчет Val2. Есть предположение, что можно выполнить расчет Val2 на стороне сервера в хранимой процедуре, но не хватает знаний по БД. Нужен совет специалистов, в каком направлении двигаться и если не трудно с примером. А дальше я уж сам разберусь.
← →
КаПиБаРа © (2004-12-20 10:00) [1]Нет мыслей?
← →
Johnmen © (2004-12-20 10:11) [2]Каковы связи между таблицами ? (один-к-одному, один-ко-многим, многие-ко-многим)
← →
КаПиБаРа © (2004-12-20 10:36) [3]Массив данных:
Num Val
1 234.1
2 173.6
3 55.8
4 77.4
5 521.2
Схема данных:Num
1
2
3
4
5
Расчетная схема (здесь содержатся формулы):Num2 Koef Num
1 1 2
1 1 4
1 -1 3
2 1 1
3 -1 5
3 -1 3
Схема результатов:Num2
1
2
3
Нужно получить Массив результатовNum2 Val2
1 195.2 //=173.6*1 + 77.4*1 + 55.8*(-1)
2 234.1 //=234.1*1
3 -577 //=521.2*(-1) + 55.8*(-1)
← →
Johnmen © (2004-12-20 10:44) [4]Понятно...
Достаточно трёх таблиц.
I - Массив данных+Схема данных
II - Расчетная схема
III - Схема результатов+Массив результатовSELECT T3.Num2, SUM(T1.Val*T2.Koef)
FROM T3
JOIN T2 ON T2.Num2=T3.Num3
JOIN T1 ON T2.Num=T1.Num
GROUP BY T3.Num2
← →
КаПиБаРа © (2004-12-20 10:53) [5]Ясно. Оказывается можно и запросами все посчитать.
Но все таки Массив данных и Схема данных - разные таблицы. Предполагается обрабатывать множество массивов данных имеющих одинаковую структуру.
← →
Johnmen © (2004-12-20 10:58) [6]>Предполагается обрабатывать множество массивов данных имеющих
>одинаковую структуру.
Просто этого не видно из приведенных условий...
Кстати, для запроса III таблица не нужна. :)
← →
stud © (2004-12-20 11:02) [7]а расчетные формулы откуда беруться?
← →
КаПиБаРа © (2004-12-20 11:36) [8]stud © (20.12.04 11:02) [7]
Человеки руками забивают.
← →
КаПиБаРа © (2004-12-22 07:55) [9]Johnmen ©
Спасибо. Получилось :)
Кстати только что применил этот подход в другом проекте. Очень неплохо получилось.
Рекомендую его всем кто обрабатывает данные.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c