Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Вложенные иерархии: вычислять или хранить? / 3 сообщений из 3, страница 1 из 1
24.07.2008, 12:32
    #35449223
jbond81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные иерархии: вычислять или хранить?
Имется таблица - дерево Групп.
Листу дерева подчинена отдельная таблица с числовыми полями.

Группы - Подгруппы- Подподгруппы - ... - Отдельные части (с числовыми полями_ Цена, Кол-во, Стоимость)

На каждом уровне иерархии нужно вычислять агрегатные значения этих полей - для отчета.

Т.е. ГруппаСтоимость = Сумма (ГруппаСтоимость всех подгрупп или отдельных частей, если подгруппы отсутствуют)

Ясно, что без рекурсии тут не обойтись.

Возникает дилемма из классики программирования:

1) хранить вычисленные агрегатные суммы в таблице Группы (ГруппаСтоимость) - но при обновлениях гемморой с каскадными обновлениями вверх по иерархии.

2) Перевычислять каждый раз рекурсивным спуском

Что выбрать?

База MySQL. Веб-приложение.
...
Рейтинг: 0 / 0
24.07.2008, 12:58
    #35449322
jbond81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные иерархии: вычислять или хранить?
Решение посередине:

вычисляемые значения хранить только для таблицы отдельных частей - там формулы идут.

Это делается в одном месте при сохранении записи.

Для подгрупп - рекусивный спуск с рекурсией каждый раз при формировании отчета.
...
Рейтинг: 0 / 0
24.07.2008, 16:11
    #35449946
_мод
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вложенные иерархии: вычислять или хранить?
jbond812) Перевычислять каждый раз
Именно так, причем способ зависит от генератора отчетов. Например ексель все сам сделает.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Вложенные иерархии: вычислять или хранить? / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]