Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.036 c
1-1105525543
Andy BitOff
2005-01-12 13:25
2005.01.23
With как параметр


14-1104578232
speed
2005-01-01 14:17
2005.01.23
Новый год!


4-1102371235
Костинг Хостинг
2004-12-07 01:13
2005.01.23
Поле Description в сервисе как его заполнить при регистрации


3-1103587970
rosl
2004-12-21 03:12
2005.01.23
приём данных


1-1105529226
Garry
2005-01-12 14:27
2005.01.23
как в DbGrid можно...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский