Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Много данных Vertical в Flat  [new]
Leran2002
Member

Откуда: Алматы, Казахстан
Сообщений: 53
Приветствую Всех!

Занимаюсь разработкой программы для планирования бюджета большого предприятия (БД - SQL 2000).

Что нужно учесть:
Число уровней - 4
Уровни 1..3 являются группировкой (дерево)
Уровень 4 - содержит детальную информацию, для него нужно определить:
Количественные показатели QTY (1..40), для каждой строки может использоваться свой набор
Периоды (1..12) и Ценовые показатели на каждый период

По моим расчетам число строк в уровне 4 может доходить до 50000, больше врядли.

Пользователю эти данные нужно предоставить в следующее плоском виде:

ID, DESCR, ..., -- информация строки
QTY_V01_P01, QTY_V01_P02, ... , QTY_V01_P12, -- QTY 1
QTY_V02_P01, QTY_V02_P02, ... , QTY_V02_P12, -- QTY 2
...
QTY_V40_P01, QTY_V40_P02, ... , QTY_V40_P12, -- QTY 40
PRICE_P01, ... , PRICE_P12, -- ценовой показатель на каждый период
AMT_P01, ... , AMT_P12. -- сумма по строке (QTY*PRICE)


Для уровней 1..3 нужно подсчитывать AMT_P01, ... , AMT_P12.

Набросал следующую структуру,
Картинка с другого сайта.
вроде красиво, но переводить ее в FLAT вид очень ресурсоемко, испробовал уже разные варианты, при полном заполнении. По подсчетам время может дойти до 8 часов и думаю это не предел.

В таблице LEV_STR я специально допустил избыточность, мне так легче оперировать с деревом из интерфейса программы (C#).

Посоветуйте как можно более оптимально представить эти данные, уже даже подумываю о создании скриптом таблицы с большим числом колонок по введенным данным (скрипт уже даже сделал, если не найду нормального способа то придется делать так, время поджимает).
Колонок получится ID(1)+QTY(12*40)+PRICE(12) = 493. Ужасть... :(

Думаю что где-то нужно допустить избыточность, но не такую.

Заказчик на данный момент все это добро ведет в Excel. Как представить удобно для себя такую структуру в базе я пока не знаю. Основное что не удовлетворяет с моей структурой - скорость выборки.

Спасибо!
7 дек 09, 19:46    [8031560]     Ответить | Цитировать Сообщить модератору
 Re: Много данных Vertical в Flat  [new]
Taffy
Member

Откуда:
Сообщений: 20498
очень хочется помочь
но совершенно не понимаю в чем Ваша проблема
вопрос в чем?
и что такое
переводить ее в FLAT вид 
и кто Вам сказал что 50 000 строк это много?
и откуда Вы взяли цифру 8 часов?
7 дек 09, 20:51    [8031651]     Ответить | Цитировать Сообщить модератору
 Re: Много данных Vertical в Flat  [new]
Leran2002
Member

Откуда: Алматы, Казахстан
Сообщений: 53
Taffy, спасибо за отклик!

Пользователю данные нужно показать в горизонтальном виде, т.е.
ID, DESCR, ... , QTY_V01_P01, QTY_V01_P02, ... , QTY_V01_P12, QTY_V02_P01, QTY_V02_P02, ... , QTY_V02_P12, ... , AMT_P01, ... , AMT_P12.

да 50000 это не много, но для структуры созданной мною на перевод в горизонтальный вид уходит много времени.

ведь, если в 4-м уровне у меня 50000 строк, то максимально загруженная таблица WBUD_LINE_QTY уже будет содержать 50000*12*40=24 000 000 записей, а таблица WBUD_LINE_PRICE и WBUD_LINE_CORR по 12*50000=600 000 записей.

8 часов как минимум, это мое расчетное время при полной загрузке данных таблиц.

Плюс дополнительно нужно добавить группировки по 12 месяцам для уровней 1..3.

Я думаю гдето нужно допустить избыточность, например что пока пришло в голову создать таблицы
WBUD_LINE_P01, ... , WBUD_LINE_P12 - т.е. на каждый период со столбцами:
LEV_STR_ID, QTY_V01, QTY_V02, ... , QTY_V40, PRICE (в данном случае можно сюда же)

Надеюсь понятно изложил.
7 дек 09, 21:15    [8031687]     Ответить | Цитировать Сообщить модератору
 Re: Много данных Vertical в Flat  [new]
Leran2002
Member

Откуда: Алматы, Казахстан
Сообщений: 53
Мужики извините, вопрос можно снимать с рассмотрения.

Что-то я конкретно запарился, забыл что для каждой детальной строки будут использоваться 1-5 QTY показателей, а не все 40, как я тестил.

В программе просто поставлю ограничение чтобы на одну детальную строку (LEV_ID=4) могли выбрать не более 5-ти разных количественных показателей.

Хотел, протестить идеальный вариант ;))))
да и 24 000 000 + 600 000 значений люди за год умудохаются забивать.

Сейчас даже при максимуме данных выйдет всего 3 000 000 (QTY) + 600 000 (PRICE) + 600 000 (CORR) = 4 200 000 строк, что дает вполне нормальные результаты по скорости.

Спасибо, за внимание!

Но если есть что посоветовать пишите.
7 дек 09, 22:34    [8031834]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить