Операция группировки данных

Материал из КинтВики

Перейти к: навигация, поиск

Содержание

Группировка данных

С точки зрения алгебраической модели данных (АМД) операция группировки (свертки) - это вынесение в реляционном выражении общего множителя за скобки.

В результате группировки создается отношение "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, - обычно являются вложенные списки (упорядоченная таблица):

ТД1 с группировкой по <A>
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
Master Detail SpaceAttr FuncAttr
ТД2 ТД1 A NUM
ТД3 ТД1 A x B NUM

Возможно, что в общем случае перечень колонок для мастера и источника следует задавать отдельно (разные идентификаторы).

Приведенное выше отношение относится к категории "Многие ко многим". Одна и та же таблица может служить источником (хранить расшифровки) для нескольких хозяинов (владельцев). И наоборот, для мастера может существовать несколько разных подчиненных таблиц (как пример, - табличные части документов, справочников).

Вложенные группировки

Если необходимо получить вложенные группировки данных, то последовательно выполняются группировки от нижнего уровня к верхнему. При этом в атрибутах группировок нижнего уровня используются все атрибуты верхних.

Предположим, что нам надо получить вложенные группировки нашей ТД1 - сначала по атрибуту 'A', потом внутри 'А' по 'B'. Сначала мы получаем группировку по 'A, B' (ТД_AB), а затем группируем полученную ТД по атрибуту 'А' (ТД_A). При этом отношения подчиненности будут следующие (от мастера к расшифровке): ТД_A > ТД_AB > ТД1.

Выборка атрибутов (проекция)

В теории баз данных под операцией проекции понимают выборку из заданного отношения определенного перечня атрибутов.

После "прямой" выборки атрибутов в результирующем отношении могут появиться неуникальные кортежи, поэтому результат необходимо свернуть. Поэтому операция проекции является операцией группировки.

Личные инструменты
Пространства имён
Варианты
Действия
Продукты
Сервис
Печать/экспорт
Инструменты