Агрегирование

Виклад матеріалу даного підрозділу необхідно почати з розяснення того, що версія операції SUMMARIZE, описана тут, не збігається з тією, яка розглядалася в попередніх виданнях цієї книги Насправді, це – вдосконалена версія, в якій подолані деякі складнощі, що виникали в попередній версії у звязку з обробкою порожніх відносин

Як було показано вище, операція розширення надає певний спосіб включення в реляційну алгебру так званихгоризонтальних обчислень,або обчислень, здійснюваних в межах кортежу. Операція агрегування виконує аналогічну функцію для так званих вертикальних обчислень, або обчислень, здійснюваних в межах атрибута. Наприклад, в результаті обчислення наступного виразу

SUMMARIZE SP PER P {Р #} ADD SUM (QTY) AS TOTQTY

формується ставлення з атрибутами Р # і TOTQTY, в якому є по одному кортежу для кожного значення Р # в проекції відносини Р по атрибуту Р #, який містить це значення Р # і відповідне загальна кількість (Рис 711) Іншими словами, ставлення SP концептуально підрозділяється на групи, або безлічі кортежів (де є по одній групі для кожного номера деталі відносно Р), після чого кожна така група використовується для вироблення одного кортежу у складі загального результату

Рис 711 Приклад застосування операції SUMMARIZE

Взагалі кажучи, значення наступній операції агрегування

SUMMARIZE a PER b ADD summary AS Z

являє собою відношення, яке визначено, як описано нижче

■ Насамперед, ставлення b має належати до такого ж типу, так і некото раю проекція відносини а (тобто кожен атрибут відносини b повинен бути атрі бутом відносини а) Припустимо, що атрибутами цієї проекції (рівним чином і атрибутами відносини b) є А1, А2, , An

■ Тема результату складається з заголовка відносини b, доповненого атрибутом Z

■ Тіло результату складається з усіх кортежів t, таких що t є кортежем відно сини b, доповненим значенням атрибута z Це значення Z обчислюється шляхом виконання операції агрегування summary по всіх кортежам відносини а,

які мають такі ж значення атрибутів {А1, А2, , An}, як і сам кортеж t (Безумовно, якщо жоден кортеж з а не має такі ж значення атрибутів {А1, А2, .., An}, як і сам кортеж t, то обчислення операції summary відбувається на порожньому множині)

Ставлення b не повинно мати атрибута Z, а операція summary не повинна посилатися на Z Зверніть увагу на те, що результат має кардинальність, рівну кардинальності відносини b, і ступінь, рівну ступеня відносини b плюс один Типом атрибута Z в цьому результаті є тип операції агрегування summary

Нижче наведено ще один приклад

SUMMARIZE (Р JOIN SP) PER P {CITY} ADD COUNT AS NSP

Отриманий при цей результат виглядає приблизно таким чином

Іншими словами, цей результат включає по одному кортежу для кожного з трьох міст, де зберігаються деталі (Лондона, Осло і Парижа) для кожного міста в ньому показано кількість поставок деталей, що зберігаються в цьому місті

Зі сказаного випливають наведені нижче висновки

1 Ще раз слід зазначити, що тут ми знову зустрічаємо приклад операції, визна ня якої базується на понятті рівності кортежів

2 Показаний тут синтаксис допускає використання множинних операцій

SUMMARIZE , наприклад, наступним чином

SUMMARIZE SP PER P {Р #} ADD (SUM (QTY) AS TOTQTY, AVG (QTY) AS AVGQTY)

3 Загальна форма операції агрегування &ltsumnarize&gt (Повторимо її ще раз) зі стоїть в наступному

SUMMARIZE  &ltrelation  exp&gt  PER &ltrelation  exp&gt

ADD  (   &ltsummarize add commalist&gt  )

Кожен вираз з додаванням результату агрегування &ltsummarize  add&gt

приймає, у свою чергу, наступну форму

&ltsummary  type&gt   [     (    &ltscalar exp&gt   )    ]    AS   &ltattribute name&gt

До типових різновидів операції агрегування &ltsummary type&gt  відносяться COUNT, SUM, AVG, MAX, MIN, ALL, ANY, COUNTD, SUMD І AVGD Суфікс D (Скорочення від distinct – різний) в операціях COUNTD, SUMD і AVGD означає усунути надлишкові дублюються значення перед виконанням операції агрегування . Скалярний вираз&ltscalar  exp&gt  може включати посилання на атрибути відносно, зазначеному за допомогою реляційного вираження &ltrelation   exp&gt, яке безпосередньо випливає за ключовим словом

SUMMARIZE Скалярний вираз &ltscalar exp&gt і навколишні його круглі дужки можуть і повинні бути опущені, тільки якщо типом операції агрегування &ltsummary type&gt є COUNT

До речі, зверніть увагу на те, що вираз з додаванням результату агрегування &ltsummarize add&gt не рівнозначно викликом оператора агрегування&ltagg  op  inv&gt.  Вираз&ltagg  op  inv&gt  є скалярним і може знаходитися скрізь, де допускається застосування литерала відповідного типу На відміну від цього, вираз &ltsummarize add&gt являє собою просто операнд операції SUMMARIZE воно не є скалярним виразом, не має сенсу за межами контексту операції SUMMARIZE І фактично не повинно зявлятися поза цим контекстом

4 Як читач міг уже помітити, операція SUMMARIZE не є примітивною, оскільки вона може бути промодульована за допомогою операції EXTEND Наприклад, наступний вираз

SUMMARIZE SP PER S { S# } ADD COUNT AS NP

визначено як коротка форма вираження, наведеного нижче

( EXTEND S { S# }

ADD ( ( ( SP RENAME S# AS X ) WHERE X = S# ) AS Y, COUNT ( Y ) AS NP ) ) { S#, NP }

Зазначене вираз може бути рівним чином представлено в наступному вигляді

WITH ( S { S# } ) AS Tl,

( SP RENAME S# AS X ) AS T2,

( EXTEND Tl ADD ( T2 WHERE X = S# ) AS Y ) AS T3, ( EXTEND T3 ADD COUNT ( Y ) AS NP ) AS T4

: T4 { S#, NP }

До речі, в цьому випадку атрибут Y має значення у вигляді відношення Додаткова інформація на цю тему приведена в розділі 64 .

5 Нижче наведено ще один приклад

SUMMARIZE S PER S { CITY } ADD AVG ( STATUS ) AS AVG_STATUS

У даному випадку відношення, вказане разом з ключовим словом PER, не тільки ставиться до такого ж типу, як деяка проекція відносини, до якого застосовується операція агрегування, але фактично є такою проекцією У подібному випадку допускається використання наступної скороченої форми

SUMMARIZE S BY { CITY } ADD AVG ( STATUS ) AS AVG_STATUS

Тут конструкція PER &ltrelation exp&gt замінена конструкцією BY&ltattribute name commalist&gt. Всі імена атрибутів, зазначені в цьому списку, розділеному комами, повинні бути атрибутами відносини, до якого застосовується операція агрегування

6 Розглянемо наступний приклад

SUMMARIZE SP PER SP { } ADD SUM ( QTY ) AS GRANDTOTAL

Відповідно з попереднім пунктом, цей вираз можна записати інакше, як показано нижче

SUMMARIZE SP BY { } ADD SUM ( QTY ) AS GRANDTOTAL

В обох випадках операції групування і агрегування виконуються на основі відношення, яке взагалі не має атрибутів Припустимо, що sp – поточне значення змінної відносини SP, а також на час припустимо, що ставлення sp містить щонайменше один кортеж У такому випадку всі ці кортежі відносини sp мають одне і те ж значення, але для атрибутів, які взагалі не існують (а саме, це один нуль-арний кортеж), тому в загальному результаті є лише одна група і, отже, тільки один кортеж (іншими словами, обчислення результатів операції агрегування виконується точно один раз для всього відносини sp) Отже, в результаті обчислення цього виразу буде отримано відношення з одним атрибутом і одним кортежем даний атрибут називається GRANDTOTAL, і єдине скалярне значення в єдиному результуючому кортежі являє собою суму всіх значень QTY в первісному відношенні sp

Якщо, з іншого боку, початкове ставлення sp взагалі не містить кортежів, то не повинно бути і груп, і тому не повинно бути результуючих кортежів (тобто результуюче відношення також є порожнім) На відміну від цього, наступний вираз повинно діяти правильно (Тобто повертати правильний результат, нуль), навіть якщо відношення sp буде порожнім

SUMMARIZE SP PER TABLE_DEE ADD SUM ( QTY ) AS GRANDTOTAL

Точніше, воно поверне ставлення з одним атрибутом, званим GRANDTOTAL, і з одним кортежем, що містить значення нуль Тому, на думку автора, має бути передбачена можливість взагалі опускати конструкцію PER, як у наступному прикладі

SUMMARIZE SP ADD SUM ( QTY ) AS GRANDTOTAL

За визначенням, виключення з виразу конструкції PER має бути еквівалентно застосуванню конструкції PER TABLE_DEE

Джерело: Дейт К Дж, Введення в системи баз даних, 8-е видання: Пер з англ – М: Видавничий дім «Вільямс», 2005 – 1328 с: Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*