Операция группировки данных
Материал из КинтВики
|
Группировка данных
С точки зрения алгебраической модели данных (АМД) операция группировки (свертки) - это вынесение в реляционном выражении общего множителя за скобки.
В результате группировки создается отношение "Master-Detail" между сверткой и исходным отношением. Допускается каскадность данных отношений, - то есть мастер (свертка) одного отношения является расшифровкой другой и т.д.
Поясним сказанное на примере. Пусть мы имеем на входе 3-арное отношение (выражение) ТД1 (для представления используем а-формат):
<ТД1> {
< A . B . NUM > {
a1 . b1 . 10,
a1 . b2 . 20,
a2 . b1 . 30,
a2 . b2 . 10,
a1 . b1 . 20,
a1 . b1 . 30
}
}
Свертка таблицы ТД1 по атрибуту <A> означает создание отношения, для которого собственным пространством будут значения атрибута <A>. Выносим значения атрибута <A> за скобки:
<ТД11> {
< A . <B|NUM>> {
a1 . ( b1.10, b2.20, b1.20, b1.30 ),
a2 . ( b1.30, b2.10 )
}
}
При группировке могут быть указаны агрегатные функции над атрибутами сворачиваемого отношения. Добавление в свертку итогов по колонке "NUM" - это создание коэффициентов при элементах пространства. Результирующее отношение (свертка) имеет вид:
<ТД12> {
< A.A_NUM . <B.NUM>> {
(a1.80) . (b1.10, b2.20, b1.20, b1.30),
(a2.40) . (b1.30, b2.10)
}
}
Атрибут итогов A_NUM - это независимый от NUM атрибут.
Мастер-таблица
Итоговое выражение ТД12 обычно нормализуют через выделение мастер-таблицы. В данной таблице собраны только итоги свертки:
<ТД2> {
< A . A_NUM > {
a1 . 80,
a2 . 40,
}
}
Таблицы ТД2 и ТД1 связаны между собой отношением Master-Detail по пространству атрибута <А>. При навигации по таблице-мастеру ТД2 мы можем обратиться за расшифровкой данных к таблице ТД1. Для этого необходимо выполнить отбор значений (получить проекцию) таблицы-расшифровки на текущее значение элемента пространства мастера.
В нашем примере для первой строки таблицы-мастера мы получаем следующую таблицу-расшифровки:
<Выборка из таблицы данных ТД1 с условием "A=a1"> {
< B . NUM > {
b1 . 10
b2 . 20
b1 . 20
b1 . 30
}
}
Подчиненные таблицы можно также группировать по атрибуту "B", получая второй уровень подчиненности и т.д.
Группировка выражений по нескольким атрибутам
Пространство свертки может быть многомерным (состоять из нескольких атрибутов). Например, сворачивая исходную таблицу ТД1 в пространстве (A | B), получаем (по NUM также суммируем):
<ТД3 = Group(ТД1) by (A . B) with Sum(NUM)> {
< A . B . NUM > {
a1 . b1 . 60
a1 . b2 . 20
a2 . b1 . 30
a2 . b2 . 10
}
}
Представление "вложенных" таблиц
Визуальным представлением таблиц, связанных отношением Master-Detail, - обычно являются вложенные списки (упорядоченная таблица):
| A | B | NUM |
|---|---|---|
| a1 | 80 | |
| b1 | 10 | |
| b2 | 20 | |
| b1 | 20 | |
| b1 | 30 | |
| a2 | 40 | |
| b1 | 30 | |
| b2 | 10 |
Колонки расшифровки (в нашем примере "NUM") совпадают.
Пустое значение колонки "B" означает универсум B (все значения).
Сортировать такую таблицу можно только в пределах группировки. Например, сортируя ТД1 по "A" надо выдерживать привязку значений "B" к "A". Сортировать по "B" имеет смысл только в пределах соответствующего значения группирующего значения "A".
Отношение Master-Detail
Для хранения параметров связи Master-Detail необходимо создать отдельное отношение (таблицу). В этой таблице должны быть ссылки на таблицу свертки, таблицу источник, атрибуты пространства и агрегатных функций:
| Master | Detail | SpaceAttr | FuncAttr |
|---|---|---|---|
| ТД2 | ТД1 | A | NUM |
| ТД3 | ТД1 | A x B | NUM |
Возможно, что в общем случае перечень колонок для мастера и источника следует задавать отдельно (разные идентификаторы).
Приведенное выше отношение относится к категории "Многие ко многим". Одна и та же таблица может служить источником (хранить расшифровки) для нескольких хозяинов (владельцев). И наоборот, для мастера может существовать несколько разных подчиненных таблиц (как пример, - табличные части документов, справочников).
Вложенные группировки
Если необходимо получить вложенные группировки данных, то последовательно выполняются группировки от нижнего уровня к верхнему. При этом в атрибутах группировок нижнего уровня используются все атрибуты верхних.
Предположим, что нам надо получить вложенные группировки нашей ТД1 - сначала по атрибуту 'A', потом внутри 'А' по 'B'. Сначала мы получаем группировку по 'A, B' (ТД_AB), а затем группируем полученную ТД по атрибуту 'А' (ТД_A). При этом отношения подчиненности будут следующие (от мастера к расшифровке): ТД_A > ТД_AB > ТД1.
Выборка атрибутов (проекция)
В теории баз данных под операцией проекции понимают выборку из заданного отношения определенного перечня атрибутов.
После "прямой" выборки атрибутов в результирующем отношении могут появиться неуникальные кортежи, поэтому результат необходимо свернуть. Поэтому операция проекции является операцией группировки.