Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Решение задач в реляционной алгебре



Среди решаемых задач условно можно выделить три различных типа задач, хотя, конечно, большинство реальных задач являются смешанными, содержат элементы всех трех типов. Однако общим местом при решении задач является умение студента высказать, сформулировать, что же представляет собой полученное как промежуточный результат отношение. В этой главе рассмотрим каждый из типов задач по мере увеличения их сложности.

3.1 Простые задачи

Как мы можем охарактеризовать класс простых задач в реляционной алгебре? В общем виде это можно выразить следующим образом. Требуется собрать в одном отношении свойства (как правило) различных объектов, причем, если и заданы какие либо дополнительные условия, то они относятся к значениям кортежей, анализируемых независимо друг от друга.

Задача 1. Выдать фамилии студентов, родившихся до 1 сентября 1990 года.

Задача 2. Выдать фамилии студентов, не получающих стипендию.

Задача 3. Сформировать список студентов – мужчин старше 20 лет, получающих стипендию.

Задача 4. Дать список групп, для которых староста в текущем учебном году либо не назначен, либо назначен позже 10 дней после начала учебы.

Рассмотрим несколько примеров, постепенно усложняя поставленную задачу.

Прежде всего, отметим, что "выдать", "сформировать список", "дать список", "дать перечень" и т.п. – различные формы одного и того же утверждения: получить отношение, включающее требуемые атрибуты, все кортежи которого удовлетворяют приведенным в задаче требованиям.

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

Рассмотрим решения.

Первые две задачи просят выдать фамилии студентов. Здесь точно указано, что требуется получить – отношение, включающее единственный атрибут Фам[6]. Этот атрибут входит в отношение СТ, следовательно, надо будет применить операцию pФам к отношению, которое содержит требуемые кортежи.

В задаче 1 условием является факт, что дата рождения меньше указанной. Следовательно, решение может быть записано так.

R1 sДрожд<"01.09.90" (СТ),

REZ pФам (R1)

Отметим, что любую константу мы будем писать в двойных кавычках. Напомним, схема R1 совпадает со схемой СТ и, следовательно, взятие проекции правомочно. Этот же результат может быть записан одной строкой, одним выражением

REZ pФам (sДрожд<"01.09.90" (СТ))

В задаче 2 условием является отсутствие стипендии, что означает, что стипендия студенту не назначалась, т.е. ее значение задано константой nil. В остальном решение очень похоже на решение задачи 1.

REZ pФам (sСтип=nil (СТ))

В третьей задаче четко не обозначено что же (какие атрибуты) следует собрать в результирующем отношении. Первое о чем следует задуматься – необходимость включения в результат не только фамилии студента, но и атрибута, играющего роль ключевого (в нашем случае Кст). Иначе различные студенты, обладающие одинаковой фамилией, останутся в единственном экземпляре. Если на занятии не было дополнительного уточнения списка атрибутов результата, то естественно включить в результат также Дрожд и Стип, а Пол не включать, так как у всех кортежей результата он должен быть одинаков – мужской. Обратим внимание, что атрибута Возраст в нашей модели не предусмотрено, но всегда существует возможность получить любую дату (функция date(день, месяц, год)[7]). Решение задачи может быть записано в виде

REZ pКст,Фам,Дрожд,Стип
(sПол="муж" and Стип¹nil and Дрожд<date(day(dt),month(dt),year(dt)-20) (СТ))

Четвертая задача мало, чем отличается от третьей

REZ pNгр (sДстг=nil or Дстг>date(10,9,year(dt)-if(month(dt)>8,0,1)) (ГР)),

Следующая серия простых задач рассматривает соединение двух типов объектов, при котором часть атрибутов берется из одного типа объекта, а остальные из другого.

Задача 5. Дать номера групп с указанием фамилии старосты.

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

Задача 7. Дать перечень студентов, тем их выпускных работ и название выпускающих кафедр.

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

В задаче 5 фамилия старосты хранится в отношении СТ, а связь ПРЕДСТАВЛЯЕТ реализована атрибутом Кстг в отношении ГР. Поэтому необходимо соединить отношения СТ и ГР при условии, что значение кода студента в отношении СТ совпадает с кодом старосты в отношении ГР, что записывается следующим образом

R1 СТ ><СТ.Кст=ГР.Кстг ГР,

REZ pГР.Nгр, СТ.Фам (R1)

Напомним, что, если староста еще не назначен, то информации об этой группе в результирующем отношении не будет. Если бы мы хотели иметь информацию обо всех группах, не зависимо от назначения старосты, то решение следовало бы записать через правое внешнее соединение (запишем его одним выражением)

REZ pГР.Nгр, СТ.Фам (СТ ><= СТ.Кст=ГР.Кстг ГР)

Решение задачи 6 можно записать в виде

REZ pГР.Nгр, ПТ.Спец (ПТ * ГР),

где естественное соединение проходит по единственному совпадающему атрибуту Nпт.

Решение задачи 7 можно записать в виде

REZ pСТ.Фам, Ст.Тема, КФ.Назв (СТ * КФ),

где естественное соединение проходит по единственному совпадающему атрибуту Nкф.

Задача 8. Привести названия дисциплин, изучаемых по специальности "Химия".

Задача 9. Дать список названий кафедр и названий дисциплин из цикла "ЕН", за преподавание которых она отвечает.

Задача 10. Дать список студентов, получивших оценку 4 или 5 по дисциплине "Матанализ".

Далее по степени усложнения идут задачи, в которых типы объектов связаны между собой связью с кардинальной пропорцией M:N, реализуемой в реляционной модели отдельным отношением.

Решение этих задач можно представить в виде соединения трех отношений. Внимательный студент, наверное, заметил, что, если мы уже получили отношение, содержащее первичные ключи некоторого типа объекта, то для получения значений любых других атрибутов этих объектов достаточно соединить это отношение с отношением соответствующего типа объекта и взять проекцию по требуемым атрибутам. Фактически, отношение, реализующее связь между двумя типами объектов, характеристики которых требуются в задаче, как раз и содержит первичные ключи. Решение задачи 8 можно записать в виде.

R1 pИЗЧ.Nдц, ПТ.Спец (ИЗЧ * ПТ),

R2 pДЦ.Назв, R1.Спец (R1 * ДЦ),

REZ p R2.Назв (sR2.Спец="Химия" (R2))

Так как отношение ИЗЧ содержит первичные ключи как потока, так и дисциплины, то естественное соединение в первой строке пройдет по единственному совпадающему атрибуту (Nпт) и, следовательно, R1 содержит перечень номеров дисциплин с указанием специальностей, студентами которых они изучаются[8]. Аналогичная операция, но уже с заменой номеров дисциплин на их названия получатся после выполнения второй строки. И, наконец, третья строка оставит только названия дисциплин, которые изучаются студентами специальности "Химия".

Это решение правильное, но не очень эффективное. Напомним, что по временным затратам естественное соединение близко к декартовому произведению, то есть, как правило, достаточно большое. Более эффективной окажется следующая логика решения задачи.

R1 pNпт (sСпец="Химия" (ПТ)), сразу сокращаем мощность ПТ

R2 pNдц (R1 * ИЗЧ),

REZ pНазв (R2 * ДЦ)

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

Эту логику рассуждений – по известным ограничениям на объекты получить их первичные ключи, по которым через связи получить первичные ключи объектов, характеристики которых нас интересуют и затем значения самих характеристик – мы будем использовать довольно часто.

Конечно, решение этой задачи можно записать одной строкой

REZ pДЦ.Назв ((pNдц ((pПТ.Nпт (sПТ.Спец="Химия" (ПТ))) * ИЗЧ)) * ДЦ),

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

Без подробных объяснений приведем решения двух других задач.

Решение задачи 9 можно записать в виде

R1 pДЦ.Nдц (sДЦ.Цикл="ЕН" (ДЦ)) – номера дисциплин, относящихся к "ЕН",

R2 pОТВ.Nкф (R1 * ОТВ) – номера кафедр, отвечающих за эти дисциплины,

REZ pКФ.Назв (R2 * КФ) – названия кафедр, соответствующие их номерам.

Решение задачи 10 можно записать в виде

R1 pДЦ.Nдц (sДЦ.Назв="Матанализ" (ДЦ)) – номера дисциплин с названием "Матанализ"[9],

R2 pОЦН.Кст (sОЦН.Оценка >= 4 (R1 * ОЦН)) – коды студентов, получивших оценку 4 или 5 по этим дисциплинам,

REZ pСТ.Фам (R2 * CТ) – фамилии этих студентов.

Освоив эти достаточно простые задачи, мы можем приступить к решению простых задач общего характера.

Для решения простых задач общего характера требуется определить цепочку отношений, в которых заложены требуемые характеристики и упомянутые в условии задачи связи. Например, в задаче 11 эту цепочку составляют отношения: ДЦ (в нем есть название дисциплин), ИЗЧ (номера потоков, изучающих эти дисциплины), ГР (номера групп, входящих в потоки, так как связь ВХОДИТ реализована атрибутом Nпт в отношении ГР), СТ (фамилии студентов, учащихся в этих группах, через связь УЧИТСЯ_В, реализованную атрибутом Nгр в СТ).

Задача 11. Дать список студентов, изучающих дисциплину "Информатика".

Задача 12. Дать фамилии старост групп и названия специальностей для потоков со специальностью "Химия" или "Физика".

Задача 13. Привести перечень названий кафедр, названий дисциплин, за которые они отвечают и фамилии студентов, получивших двойки по этим дисциплинам за последнюю неделю.

Решение задачи 11 можно записать в виде

R1 pДЦ.Nдц (sДЦ.Назв="Информатика" (ДЦ)) – номера дисциплин с названием "Информатика",

R2 pИЗЧ.Nпт (R1 * ИЗЧ) – номера потоков, студенты которых изучают дисциплины, номера которых собраны в отношении R1,

R3 pГР.Nгр (R2 * ГР) – номера групп, входящих в потоки, номера которых собраны в отношении R2,

REZ pСТ.Фам (R3 * CТ) – фамилии студентов, учащихся в группах, номера которых собраны в отношении R3.

Обратите внимание, что воспользоваться более короткой связью ОЦЕНЕН между отношениями ДЦ и СТ нельзя. Не все студенты, изучающие дисциплину, уже сдавали по ней экзамен и получили оценку, в результате чего может быть потеряна часть информации.

Решение задачи 12 можно записать в виде

R1 pПТ.Nпт, ПТ.Назв (sНазв="Физика" or Назв="Химия" (ПТ)) – номера потоков с названиями "Физика" или "Химия",

R2(Кст, Назв) pГР.Кстг, R1.Назв (R1 * ГР) –коды старост групп и названия специальностей, которым обучаются студенты групп, относящихся к потокам, номера которых собраны в отношении R1; мы воспользовались переименованием атрибутов в R2, чтобы в следующем операторе применить естественное соединение.

REZ pСТ.Фам, R2.Назв (R2 * CТ) – фамилии старост групп и названия специальностей.

Решение задачи 13 может быть записано в виде

R1 pОЦН.Кст, ОЦН.Nдц (sОценка=2 and Дата>date()-7 (ОЦН)) – коды студентов и номера дисциплин, по которым этими студентами были получены двойки за последнюю неделю,

R2 pR1.Кст, ДЦ.Nдц, ДЦ.Назв (R1 * ДЦ) – к кодам студентов и номерам дисциплин из R1 добавлены названия этих дисциплин.

R3(Кст, Назв_д, Назв_к) pR1.Кст, ДЦ.Назв, КФ.Назв (R2 * КФ) – к кодам студентов и названиям дисциплин из R2 добавлены названия кафедр, отвечающих за эти дисциплины. Естественное соединение прошло по атрибуту Кдц. Переименование атрибутов выполнено, чтобы не было в отношении R3 двух атрибутов с одинаковым названием.

REZ pСТ.Фам, R3.Назв_д, R3.Назв_к (R3 * CТ) – фамилии студентов, названия дисциплин и отвечающих за них кафедр, по которым за последнюю неделю получены двойки.

3.2 Задачи на сравнение множеств объектов

Следующий тип задач – задачи на сравнение двух множеств. Как правило, в формулировке таких задач присутствуют слова "все", "только", "все и только". Текст задач этого типа построен таким образом, что в нем записана необходимость выделения двух отношений (множеств) с одинаковой структурой (схемой), причем одно из этих отношений должно быть подмножеством другого (АÌВ). При реализации на компьютере условие, что все элементы одного отношения (А) являются элементами другого (В), легче всего реализуется созданием разности двух отношений (А-В) (из меньшего вычитается большее), после чего полученное отношение анализируется на пустоту.

Задача 14. Дать фамилии студентов, выбравших все дисциплины типового учебного плана.

Задача 15. Дать фамилии старост групп обучающихся только по типовым учебным планам.

Задача 16. Названия специальностей, все студенты которых учатся по типовым учебным планам.

При решении задач на сравнение двух отношений, таким образом, требуется:

· понять, что задача сводится к сравнению двух отношений;

· сформулировать две подзадачи, описывающие эти два отношения;

· правильно оценить какое из отношений должно являться подмножеством другого (либо они должны совпадать)

Начнем с задачи 14. Какие два отношения скрыты в этой формулировке? На самом деле для каждого студента мы должны сравнить множество дисциплин типового учебного плана для выбранной им специальности и множество дисциплин, которые он фактически выбрал. Если множество дисциплин, которые он фактически выбрал, включает соответствующее множество дисциплин типового учебного плана, то это и означает, что он изучает все дисциплины типового учебного плана. Однако в реляционной алгебре мы не можем организовать цикл по всем студентам с целью проверки того, как соотносятся эти два множества для каждого из них. Поэтому реально мы должны рассматривать два множества пар, элементами которых являются пары значений атрибутов – код студента и номер дисциплины:

· отношение R1(Кст, Nдц) – множество всех студентов с указанием для каждого из них номеров дисциплин, которые он должен был бы изучить по типовому учебному плану,

· отношение R2(Кст, Nдц) – множество всех студентов с указанием для каждого из них номеров дисциплин, которые он выбрал для изучения.

Еще раз обратим внимание студента, что схемы отношений одинаковы, но вычисляются они с использованием различных типов связей между типами объектов СТУДЕНТ и ДИСЦИПЛИНА. В первом случае это длинная цепочка: СТУДЕНТ, УЧИТСЯ_В, ГРУППА, ВХОДИТ, ПОТОК, ИЗУЧАЕТ, ДИСЦИПЛИНА, а во втором – СТУДЕНТ, ВЫБИРАЕТ, ДИСЦИПЛИНА. Подзадача получения отношения R1 относится к типу простых задач, а подзадача получения R2 вообще не требует усилий, так как R2 совпадает с отношением ВЫБ.

Что же мы получим, вычислив разность R3=R1-R2? Обратите внимание, что если студент выбрал все дисциплины типового учебного плана, то в R3 информации об этом студенте не останется (не будет ни одного кортежа содержащего код этого студента). Таким образом, в R3 останутся только коды тех студентов, которые не изучают все дисциплины типового учебного плана. Следовательно, если из всех студентов убрать тех, которые попали в отношение R3, то мы получим решение задачи 14.

Достаточно полезно расписывание текста задачи в виде ниже приведенной таблицы (схема 3)

Основной строкой этой таблицы является вторая, в которой прописываются первичные ключи атрибутов, упомянутых в тексте задачи. Рассуждения (и, соответственно, построения) начинаются со столбца, отмеченного вертикальной стрелкой. В данной задаче требуется найти имена студентов; именно поэтому мы начинаем рассуждения с атрибута код студента (Кст). С одной стороны в задаче говорится о выбранных студентом дисциплинах. Двигаясь влево от Кст, мы выделяем связь ВЫБИРАЕТ. Здесь показаны две стрелки, что подчеркивает, что студент может выбрать в общем случае несколько (множество) дисциплин. Аналогичные рассуждения можно проговорить, двигаясь вправо от Кст, и мы приходим согласно тексту задачи к множеству дисциплин, которые он должен изучить как представитель соответствующей группы и потока. Конечно, все эти рассуждения согласуются с концептуальной моделью, выбирая из нее то, что относится к данной задаче. Третья строка предназначена для записи возможных дополнительных ограничений на множества объектов (в данной задаче отсутствуют). В четвертой строке фиксируются условия на сравнение множеств, о котором говорится в тексте задачи.

Типы объектов и связей (стрелка показывает начало рассуждений) ДИСЦИПЛИНА ВЫБИРАЕТ СТУДЕНТ УЧИТСЯ В ГРУППА ВХОДИТ ПОТОК ИЗУЧАЕТ ДИСЦИПЛИНА
Первичные ключи типов объектов Nдц Nдц Кст Nгр Nпт Nдц Nдц
Ограничения на множества (отсутствуют в данной задаче)
Условие на множества М1(Кст, Nдц)   É   М2(Кст, Nдц)
Схема 3. Преобразование текста задачи 14 в цепочки связей
                         

Запишем теперь эти рассуждения в виде выражений реляционной алгебры.

R11 pСТ.Кст, ГР.Nпт (СТ * ГР) – коды студентов с указанием номера потока, к которому они относятся; естественное соединение по единственному совпадающему атрибуту Nгр.

R1 pR1.Кст, ИЗЧ.Nдц (R11 * ИЗЧ) – коды студентов с указанием номеров дисциплин, которые они должны бы изучать по типовому учебному плану; естественное соединение по единственному совпадающему атрибуту Nпт.

R2 ВЫБ – это действие записано только для совпадения обозначений с используемыми при описании решения задачи.

R3 R2 – R1 – коды студентов с указанием номеров дисциплин из типового учебного плана, которые они не выбрали для изучения.

R4 pR3.Кст (R3) – коды студентов, которые не соответствуют условию задачи.

R5 pСТ.Кст (СТ) - R4 – коды студентов, которые соответствуют условию задачи.

REZ pСТ.Фам (R5 * CТ) – фамилии студентов, изучающих все дисциплины типового учебного плана.

Решение задачи 15 может быть записано в виде

R1(Кст, Nдц) pГР.Кстг, ИЗЧ.Nдц (sГР.Кстг ¹ Nil (ГР) * ИЗЧ) – коды старост групп с указанием номеров дисциплин, которые они должны бы изучать по типовому учебному плану; естественное соединение по единственному совпадающему атрибуту Nпт.

R2 ВЫБ - R1 – коды студентов с указанием выбранных номеров дисциплин, причем для старост групп выбранных не из типового учебного плана.

R3 pR1.Кст (R1) - pR2.Кст (R2) – коды старост групп, соответствующих условию задачи.

REZ pСТ.Фам (R3 * CТ) – фамилии студентов, изучающих все дисциплины типового учебного плана.

На что следует обратить внимание при анализе решения этой задачи? Отношение R1 содержит коды всех назначенных старост групп. Отношение R2 обо всех студентах, а не только о старостах групп. Нас это не волнует, так как при вычитании в следующей строке алгоритма это отношение является вычитаемым, а, значит, вся лишняя информация будет проигнорирована. При получении отношения R3 мы предварительно избавляемся от Nдц; они свою роль сыграли на предыдущем шаге. Последний шаг – стандартный прием перехода от ключевых атрибутов (Кст) к функционально от них зависящим, требуемым по условию задачи (Фам). Также отметим, что в задаче 14 речь шла о всех дисциплинах типового учебного плана и отношение ВЫБ было вычитаемым, а в задаче 15 говорилось о старостах, изучающих только дисциплины типового учебного плана, и ВЫБ стало уменьшаемым.

Перейдем к задаче 16. Напомним, что некоторые студенты могли либо заменить часть дисциплин типового учебного плана, либо дополнить его несколькими другими. Эта задача является вариацией задачи 14. Если мы определим коды студентов с указанием номеров потоков, к которым они относятся, и дисциплин, не относящихся к типовому учебному плану, то, следовательно, мы знаем номера потоков, в которых не все студенты учатся по типовым учебным планам. Небольшая трудность состоит в том, что отношение ВЫБ не содержит атрибут Nпт и, следовательно, при вычитании уменьшаемое тоже не должно содержать Nпт. Таким образом, мы вынуждены сначала получить коды студентов, которые учатся не только по типовым учебным планам, а по этим кодам получить номера потоков, не удовлетворяющих условиям задачи и затем перейти стандартным образом к названию специальности.

Решение задачи 16 может быть записано в виде.

R11 pСТ.Кст, ГР.Nпт (СТ * ГР) – коды студентов с указанием номера потока, к которому они относятся; естественное соединение по единственному совпадающему атрибуту Nгр.

R1 pR1.Кст, ИЗЧ.Nдц (R11 * ИЗЧ) – коды студентов с указанием номеров дисциплин, которые они должны бы изучать по типовому учебному плану; естественное соединение по единственному совпадающему атрибуту Nпт.

R3 R1 - ВЫБ – коды студентов с указанием номеров дисциплин из типового учебного плана, которые они не выбрали для изучения.

R4 pR11.Nпт (pR3.Кст (R3) * R11) – номера потоков, не все студенты которых соответствуют условию задачи.

REZ pПТ.Спец ((pПТ.Nпт (ПТ) - R4) * ПТ) – названия специальностей, все студенты которых учатся по типовым учебным планам (условие задачи).

Следующая задача несколько отличается от предыдущих задач.

Задача 17. Номера групп, все студенты которых изучают одни и те же дисциплины.

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

Учитывая это объяснение, решение задачи 17 можем записать в виде.

R1 pСТ.Кст, СТ.Nгр, ВЫБ.Nдц (СТ * ВЫБ) – для каждого студента указан номер группы, в которой он учится и номер дисциплины, которую он выбрал для изучения; естественное соединение по единственному совпадающему атрибуту Кст. Таким образом, мы получили множество троек – Кст, Nгр, Nдц по фактически изучаемым дисциплинам.

R2 pR1.Nгр, R1.Nдц (R1) – избавившись от кода студента, мы получили множество пар – Nгр, Nдц, которое говорит в какой группе хотя бы кем-то изучается та или иная дисциплина. Другими словами, для каждой группы имеем свой максимальный перечень дисциплин, выбранный для изучения студентами группы.

R3 pСТ.Кст, СТ.Nгр, R2.Nдц (СТ * R2) – это множество троек построено так, что перечень дисциплин, изучаемых хотя бы кем-то из группы, приписан каждому студенту этой группы; естественное соединение по единственному совпадающему атрибуту Nгр.

R3 R1 - ВЫБ – коды студентов с указанием номеров дисциплин из типового учебного плана, которые они не выбрали для изучения.

R4 R3 – R1 – остались кортежи, указывающие на студентов группы, которые не изучают дисциплины, выбранные для изучения другими студентами этой группы.

REZ ГР - pR4.Nгр (R4) – те группы, в которых все студенты изучают одни и те же дисциплины (условие задачи).

3.3 Задачи на применение агрегативных функций

Как правило, при решении задач на применение агрегативных функций больших затруднений у студентов не возникает. Обратим внимание, однако, на два момента, о которых они поначалу забывают.

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

R1(<список атрибутов>,<список имен>)

<список атрибутов> F <список функций> (R)

где <список атрибутов> – имена атрибутов из R, по которым происходит агрегация кортежей отношения R; <список функций> – названия функций, используемых при агрегации; <список имен> – имена, которыми называются атрибуты, соответствующие списку функций. Так как общее количество атрибутов отношения R, как правило, существенно больше, чем указывается перед знаком функции, то студенты норовят в результат R1 включить дополнительные (не входящие в список атрибутов) атрибуты из R.

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

Сначала рассмотрим совсем простые задачи, затрагивающие только одно отношение.

Задача 18. Для каждого потока показать количество дисциплин, которые придется изучить.

Задача 19. По всем выпускающим кафедрам дать количество выпущенных студентов а, также, минимальную и максимальную оценку.

Разберем задачу 18. Информация о том, в каком потоке, какие дисциплины изучаются, собрана в отношении ИЗЧ. Первичный ключ этого отношения состоит из двух атрибутов, поэтому агрегация по любому из этих атрибутов допустима. В данном случае, при агрегации по Nпт мы как раз и можем получить сведения о количестве дисциплин, изучаемых в потоке.

Решение задачи примет вид

REZ(Nпт, Кво) Nпт F count()(ИЗЧ)

Задача 19 очень похожа на задачу 18, но при ее решении вычисляется сразу несколько агрегативных функций. Так как связь ВЫПУСКАЕТ реализована внесением соответствующих атрибутов в отношение СТУДЕНТ, то агрегативные функции применяются к СТ.

Решение задачи примет вид

REZ(Nпт, Кво, оц1, оц2) Nкф F count(), min(оценка), max(оценка) (СТ)

Усложним теперь эти задачи. Достаточно часто встречаются задачи, в которых сначала для различных отношений требуется вычислить значения необходимых агрегативных функций, а затем уже эти, вновь полученные отношения связываются между собой. Рассмотрим задачу 20.

Задача 20. Для каждой группы показать поток, к которому она относится, количество дисциплин, которые придется изучить каждому из студентов группы, а, также, количество студентов в ней и среднюю и максимальную стипендию.

Первая часть задачи повторяет задачу 18, вторая похожа на задачу 19, и, наконец, соединив полученные отношения через отношение ГРУППА, получим искомое решение.

R1(Nпт, квдп) Nпт F count() (ИЗЧ)

R2(Nгр, квст, зпср, зпм) Nгр F count(), avg(зарплата), max(зарплата) (СТ)

REZ(Nгр, Nпт, квдп, квст, зпср, зпм)

pR2.Nгр, R1.Nпт, R1.квдп, R2.квст, R2.зпср, R2.зпм (R2*ГР*R1),

причем первое естественное соединение выполняется по атрибуту Nгр, а второе – по атрибуту Nпт.

Усложнение задачи 19 можно продемонстрировать на примере задачи 21.

Задача 21. По всем выпускающим кафедрам дать количество выпущенных студентов, значения и количество минимальных и максимальных оценок.

Суть решения этой задачи состоит в том, что агрегативные функции следует применить к отношению, полученному в свое время применением агрегативных функций. Сначала для каждой выпускающей кафедры найдем количество выпущенных студентов и значения минимальной и максимальной оценок. Затем в отношении СТУДЕНТ мы оставим только кортежи о тех студентах, которые получили либо минимальные, либо максимальные оценки и вычислим в каждом случае их количество и, наконец, соединив эти промежуточные отношения посредством атрибута Nкф, получим решение задачи.

R1(Nкф, кво, оц1, оц2) Nкф F count(), min(оценка), max(оценка) (СТ)

R2(Nкф, кв1) Nкф F count() (R1>< Nкф=Nкф and оц1=оценка СТ)

R3(Nкф, кв2) Nкф F count() (R1>< Nкф=Nкф and оц2=оценка СТ)

REZ(Nкф, оц1, кв1, оц2, кв2)

pR1.Nкф, R1.кво, R1.оц1, R2.кв1, R1.оц2, R3.кв2, (R1*R2*R3)

Чтобы у студента не сложилось впечатление, что агрегация всегда проходит по одному атрибуту, рассмотрим задачу 22.

Задача 22. Для каждой кафедры в разрезе их циклов дать количество дисциплин, за которые она отвечает.

В данной задаче для каждой кафедры необходимо получить не один кортеж, а столько, по скольким циклам она преподает дисциплины. Этот результат как раз и достигается тем, что агрегация ведется по двум атрибутам: Nкф и Цикл.

REZ(Nкф, Цикл, Кво) Nкф, Цикл F count() (ОТВ*ДЦ)





Дата публикования: 2015-10-09; Прочитано: 4861 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.026 с)...