Реляционная алгебра

advertisement
Оглавление
Реляционные базы данных. Теоретические основы. Решение задач. .... 2
1. Основные математические понятия .............................. 4
1.1 Множества ................................................................. 4
1.2 Алгебра множеств ..................................................... 5
1.3 Отношения ................................................................. 6
1.4 Операции над отношениями. ................................... 9
1.5 Агрегативные функции. ......................................... 16
1.6 Дополнительные операции. ................................... 18
2. Описание модели .......................................................... 19
2.1 Концептуальная модель.......................................... 20
2.2 Реляционная модель ............................................... 23
3 Решение задач в реляционной алгебре ........................ 24
3.1 Простые задачи ....................................................... 24
3.2 Задачи на сравнение множеств объектов ............. 31
3.3 Задачи на применение агрегативных функций .... 36
4 Особенности записи запросов на SQL ......................... 36
1
Реляционные базы данных.
Теоретические основы. Решение задач.
Данное учебное пособие предназначено для формирования у
студентов навыков решения задач при работе с базами данных. В
настоящее время наиболее распространенными базами данных являются реляционные базы данных, основанные на реляционных моделях.
Реляционные базы данных получили широкое распространение благодаря двум факторам:
 В основе работы с реляционными моделями лежит математическая теория: теория множеств, реляционная алгебра и реляционное исчисление;
 Современная вычислительная техника способна хранить
большие объемы информации и эффективно выполнять необходимые действия с соответствующим образом структурированными данными.
В настоящее время достаточно много литературы, посвященной
проектированию баз данных [1-4], в которой рассматриваются этапы
превращения результатов обследования функционирования некоторого предприятия в реляционную модель, удовлетворяющую критериям
полноты, целостности, достоверности хранимых данных, а также методы достижения этих целей: функциональные зависимости и нормализация отношений. Эти разделы в данном пособии не рассматриваются.
Однако имеется недостаток литературы, в которой делается попытка научить студента решать задачи, то есть по некоторому тексту,
написанному на естественном языке записать запрос к базе данных на
языке и в терминах, воспринимаемых системой управления базами
данных. Основным препятствием для студента на этом этапе является
интерпретация текста задачи. Покажем это на примере.
Казалось бы простая задача: "Получить список студентов, изучающих русский язык". Однако давайте проанализируем сказанное.
Что значит, студент изучает русский язык. Это можно понимать так.
"В течение всего времени обучения, какое-то время было потрачено на
изучение русского языка" или "В течение данного семестра студент
2
изучает русский язык". В первом случае каждый студент хоть какое-то
время тратит на изучение русского языка, и поэтому мы можем считать, что любой студент (что тоже самое все студенты) изучает русский язык. Во втором случае только часть студентов в данном семестре изучает русский язык.
Поэтому при проведении занятий следует уделять достаточно
внимания на то, что студент понял задачу именно так, как рассчитывает преподаватель. Еще лучше записывать условие задачи подробнее,
добиваясь однозначной ее интерпретации студентами, хотя, если признаться, это не всегда получается.
Первая часть посвящена основным математическим понятиям,
лежащим в основе реляционных баз данных. Каждая операция сопровождается примерами, при описании которых автор опирается на интуитивное понимание студентами используемых отношений, полное
описание которых приведено во второй части. Третья часть рассчитана
на развитие у студентов мышления множествами объектов. Несмотря
на то, что курс теории множеств ими, как правило, уже прослушан, но
рассматриваемые там абстрактные примеры a, b, c не сразу распространяются ими на конкретные объекты, такие как студент, группа,
дисциплина и т.п. Еще один существенный момент заключается в следующем. В теории множеств совсем не уделяется внимания на размерность элементов множеств, считая их по умолчанию одинаковой размерности. Отсутствие навыков критического отношения к размерности
элементов отношений так же отрицательно сказывается на решении
задач в области баз данных. Четвертый раздел посвящен записи задач,
рассмотренных в третьем разделе, на наиболее распространенном в
настоящее время языке запросов к базам данных – SQL. Сохраняя
необходимость множественного мышления при анализе задачи, SQL
предоставляет некоторое отличие по отношению к реляционной алгебре в записи алгоритма на получение ответа на запрос.
Для приобретения навыков решения задач по написанию запросов к базам данных необходимо освоить основные математические
понятия, лежащие в основе реляционных баз данных.
3
1. Основные математические понятия
1.1 Множества
Базовым понятием при работе с базами данных является понятие множества.
Множество – набор, совокупность, собрание каких-либо объектов,
называемых его элементами, обладающих общим для всех них характеристическим свойством.
В этом определении следует остановиться на двух моментах.
Первое, на что мы хотим обратить внимание, то, что мы абстрагируемся от рассмотрения свойств элементов, из которых множество
состоит. Каждый объект сам по себе может иметь разнообразные характеристики или свойства, но как элемент того или иного множества
все объекты должны обладать обозначенными свойствами. В качестве
примеров можно рассмотреть множество всех студентов или множество всех студентов, изучающих русский язык и т.п. Объектами этих
множеств являются разнообразные люди (лица, персоны), просто в
данном случае из многих характеристик, которыми обладают лица,
интересуют лишь несколько характеристик (свойств), которые имеют
соответствующие значения. Для обоих упомянутых множеств объектами являются личности, обладающие разнообразными свойствами,
такими как цвет глаз, рост и вес, количество родственников, работает
она (личность) или учится (а может быть одновременно и работает и
учится); если учится, то на каком курсе, какие изучает дисциплины и
еще много разнообразной информации, а если работает, то в какой
должности, в каком подразделении и т.п. Разнообразных свойств каждый объект имеет достаточно много, но в зависимости от постановки
задачи при ее решении мы ограничиваемся теми, которые прямо или
косвенно в ней упомянуты. Поэтому в первом случае – множество всех
студентов – мы забываем, не обращаем внимания на все характеристики, кроме одной: учится человек в институте или нет, а во втором – две
характеристики, два свойства: учится ли он и при этом среди всех изучаемых им дисциплин должен быть русский язык.
С точки зрения теории множеств мы говорим, что некоторый
объект а принадлежит множеству А (характеристики множества уже
4
определены), если этот объект обладает указанными характеристиками
и эти характеристики имеют соответствующие значения. Обозначается
этот факт аА. При написании различных программ можно встретить
эквивалентную запись: а in А. Если же некоторый объект b не обладает
нужным свойством или это свойство не имеет соответствующего значения, то говорят, что b не принадлежит множеству А, что обозначается как bА (другие формы записи: not bА, not b in А, b not in А).
Может случиться, что множество не содержит ни одного элемента. В этом случае говорят, множество пусто и обозначают такое
множество знаком . Иногда говорят в этом случае, что множество не
существует (not exists), хотя интерпретировать это надо в том смысле,
что множество не содержит ни одного элемента. Наоборот, множество
существует, если в нем есть хотя бы один элемент.
Отметим также тот факт, что по определению множество не
может содержать двух одинаковых элементов (мультимножества мы
не рассматриваем).
1.2 Алгебра множеств
Вторым моментом, на котором следует остановиться – какие
операции (действия) можно выполнять над множествами.
Алгебра – раздел математики, изучающий алгебраические операции.
Алгебра множеств – раздел теории множеств, занимающийся исследованием операций над множествами.
Рассмотрим в алгебре множеств те операции, которые часто используются в практике решения задач. Нас интересуют четыре бинарные операции: сравнение, объединение, пересечение и разность [].
Напомним еще раз. Любая операция над множествами А и В допустима, если эти множества имеют одинаковую природу, то есть обладают общими характеристиками (свойствами).
Сравнение. Говорят, что множество В является подмножеством
множества А, если любой элемент множества В является элементом
множества А. Обозначается это ВА. Иногда, чтобы подчеркнуть, что
все элементы множества А могут быть элементами множества В, используют специальное обозначение ВА. Мы этого делать не будем,
хотя всегда будем допускать возможность совпадения всех элементов.
5
Два множества А и В эквивалентны А=В, тогда и только тогда, когда
выполнены оба условия ВА и АВ.
Объединение. Множество С является объединением множеств А
и В (С= АВ), если любой элемент множества С является либо элементом множества А, либо элементом множества В, причем АС и
ВС.
Пересечение. Множество С является пересечением множеств А
и В (С= АВ), если множество С содержит все элементы, которые являются одновременно элементами и множества А и множества В,
Справедливо, что СА и СВ.
Для объединения и пересечения справедливы свойства коммутативности
АВ=ВА
и
АВ=ВА
и
ассоциативности
А(ВС)=(АВ)С и А(ВС)=(АВ)С.
Разность. Множество С является разностью двух множеств А и
В (С= А-В), если множество С содержит все элементы из множества А,
которых нет в множестве В. Разность двух множеств не коммутативна:
А-В≠В-А. Стоит обратить внимание, что если АВ, то А-В=
Рассмотрим некоторые примеры. Пусть даны два множества,
элементы которых указаны в фигурных скобках, причем порядок расположения элементов множества безразличен. A={a, b, c, e, f, h} и
B={d, e, a, x}. Тогда
АВ={a, b, c, e, f, h, d, x}
АВ= {a, e}
А-В={b, c, f, h}
В-А={d, x}
1.3 Отношения
До сих пор мы рассматривали множества, характеристики которых заданы в самом общем виде. Если же на объекты наложить более
строгие условия, то можно ввести дополнительные операции. Основным объектом реляционных баз данных является отношение.
Отношение в реляционной базе данных – подмножество прямого (декартова) произведения значений различных свойств объекта, рассматриваемого в определенном ракурсе.
6
Рассмотрим подробно это определение. Как представлены свойства объекта? Для каждого свойства выбирается некоторое множество
значений, называемое доменом, элементы которого (и только они) используются для записи характеристики конкретного объекта. Другими
словами, смысл домена в том, чтобы определить роль соответствующей характеристики при описании свойств объекта. Наиболее распространенные домены: числа, строки, булевские значения (истина и
ложь), множества значений, заданные перечислением (например,
названия дней недели или месяцев), допустимые оценки знаний студентов (пятибалльная, европейская – А, В, С, D, E, FX, F, стобальная и
т.п.), названия дисциплин и т.д. Прямое произведение доменов представляет множество всех возможных комбинаций элементов, выбранных из каждого домена. Например, если отношение содержит три
свойства, то каждый из элементов отношения определяется тремя значениями, по одному из каждого домена. В любой момент времени в
отношении представлена только часть (подмножество) всех возможных комбинаций свойств объекта, причем, как правило, незначительная часть.
Для чего добавлены слова "объект, рассматриваемый в определенном ракурсе". Слово "объект" используется в самых различных
смыслах. Например, студент это объект, множество – объект, отношение объект и т.д. Часто возникает путаница, что именно в данный момент понимается под объектом. При создании модели мы естественно
берем не все характеристики реального объекта, а только часть их,
рассматривая реальный объект с какой-либо определенной точки зрения, в определенном ракурсе. Как правило, в базе данных информация
о реальном объекте хранится в различных ракурсах, и, как правило,
разбросана по разным отношениям. Обычно формулировка задачи выполняется в терминах реальных объектов и умение студента состоит в
том, чтобы при ее решении выбрать соответствующие поставленной
задаче отношения, именно те, в которых хранятся данные об объектах,
обозначенных в поставленной задаче.
Таким образом, отношение можно рассматривать как множество
элементов (строк, кортежей), каждый из которых содержит преду-
7
смотренные этим отношением значения характеристик некоторого
реального объекта.
Наиболее трудная часть решения задачи студентом состоит как
раз в правильной интерпретации текста задачи, выделении тех отношений в базе данных, в которых хранятся характеристики объектов,
упомянутых в задаче.
Отношение можно рассматривать как двумерную таблицу, каждая строка которой соответствует значениям выделенных характеристик объекта, а столбцы – характеристики (свойства, атрибуты) этих
объектов. Степенью отношения называется количество атрибутов, а
мощностью – количество кортежей.
Кроме естественных характеристик объектов, таких как вес,
рост, оценка знаний следует обратить внимание на особые характеристики, называемые ключами отношения.
Первичный ключ – характеристика объекта, назначение которой состоит в том, чтобы различать объекты, собранные в одном отношении.
В большинстве случаев это специальная характеристика – идентификатор, не несущая какой-либо смысловой нагрузки, но в отдельных случаях роль первичного ключа могут играть и обычные свойства,
при условии, что они не могут принимать одинаковые значения для
различных объектов в течение всего времени существования отношения.
Между разными объектами могут существовать связи. Например, фраза "староста группы" должна интерпретироваться следующим
образом. Имеется два различных типа объектов: студенты и группы.
Один из студентов, как правило, учащийся в группе, играет в ней особую роль – роль старосты группы. Эта роль и является связью между
двумя типами объектов. Кстати, в предыдущем предложении высказана и другая связь между теми же типами объектов – студент учится в
группе. Более подробно связи рассматриваются в разделе "проектирование баз данных". Здесь мы только подчеркиваем, что связи в реляционных базах данных реализуются через специальные свойства объектов – внешние ключи.
Внешний ключ – специальная характеристика объекта, реализующая
8
связь этого объекта с другим.
В некоторых случаях связи между объектами реализуются отдельными отношениями. В таких отношениях совокупность внешних
ключей, являясь первичным ключом этого отношения, характеризует
(указывает на) те объекты, между которыми связь установлена.
Здесь приходится еще раз подчеркнуть, что в реляционной модели отношениями реализуются как множества объектов, так и факты
существования связей между объектами1. В связи с этим, еще раз следует отметить о роли как самих отношений во всей модели, так и о
роли любого из атрибутов в каждом отношении. Одной, но достаточно
важной составляющей, успешного решения задач в базах данных является четкое представление о той роли, которую атрибут играет в отношении и во всей модели в целом. Именно поэтому при проектировании
модели существенное внимание должно быть уделено наименованию
атрибутов, чтобы само название подсказывало роль, которую атрибут
играет в модели. Не менее важно умение студента воспринимать размерность, которая скрыта в каждом домене. С чисто математической
точки зрения домены состоят из одинаковых значений. Например, и
возраст студента и номер группы могут быть представлены целыми
числами. Однако у студента не должно даже возникнуть мысли складывать или сравнивать значения этих доменов, потому только, что это
бессмысленно именно в силу различия размерности; два домена представляют различную природу данных.
1.4 Операции над отношениями.
Несколько раз мы подчеркивали, что отношения можно рассматривать как множество кортежей (строк). Следовательно, все ранее
определенные операции для множеств применимы для отношений при
В этом случае, конечно же, интерпретировать отношение как совокупность
объектов не правильно. Надо говорить о множестве существующих связей
между объектами. Однако на применении операций над отношениями этот
нюанс роли не играет.
1
9
условии, что отношения имеют одинаковые характеристики, т.е. схемы
отношений одинаковы2.
Каждое отношение обладает схемой, в которой описано имя отношения и имена его свойств (атрибутов). Учитывая специфику отношений как объектов, над ними можно определить ряд специфических
операций.
Реляционная алгебра – совокупность операций, выполняемых над отношениями, в результате применения которых получаем новое отношение с известной схемой.
При рассмотрении операций следует обратить внимание на две
основные характеристики отношения: схема отношения, в которой
количество атрибутов называется степенью, и количество кортежей,
называемое мощностью. Если схема результата определена однозначно, то мощность результата может быть только оценена, показана в
сравнении с мощностью исходных отношений.
Для начала рассмотрим две простые операции, которые "ужимают" таблицу либо по вертикали, либо по горизонтали.
Селекция. Мы уже не раз интерпретировали таблицу как множество кортежей (строк), причем каждый кортеж – информация о свойствах некоторого объекта. Можно получить новое отношение, в котором будут только те кортежи из исходного отношения, которые удовлетворяют некоторому условию или, что тоже самое, предикат 3 кортежа, вычисленный на значениях его свойств принимает истинное значение.
R1  <условие> (R),
где R – исходное отношение, <условие> – предикат, высказывание об
одном или нескольких атрибутах отношения R, R1 – результирующее
отношение.
На самом деле совпадения схем отношений мало. Требуется, чтобы совпадали функциональные зависимости между характеристиками этих отношений.
3
Предикат – функция, значением которой является высказывание об n-ках
объектов, представляющих значения аргументов.
2
10
Например, пусть отношение R содержит следующие характеристики о студенте: код, фамилия, Nстуденческого билета, дата рождения, пол, выплачиваемая стипендия, т.е. схема отношения R имеет вид
R = R(Кст, Фио, Nст_билета, Д_р, Пол, Стипендия)
Правомерны следующие условия:
 Пол = "женский"
 Д_р = "01.10.1980"
 Пол = "мужской"  Стипендия > 1000 руб.
 Д_р ≥ "01.01.1980"  Д_р ≤ "31.12.1980"  Пол = "женский"
Подставляя любое из этих условий, мы получим отношение –
множество студентов, для каждого из которых справедливо (истинно)
записанное условие.
Особо следует обговорить возможность использования функций
при записи условия. В некоторых СУБД это допускается, в других нет.
В данном пособии мы будем считать допустимой, например, такую
запись условия: Месяц(Д_р) ≥ 11, что означает выделение всех, родившихся в ноябре или декабре.
Для селекции справедливо
<условие1> (<условие2> (R)) = <условие1>  <условие2> (R),
т.е. последовательное применение двух селекций эквивалентно применению одной селекции с условием равным конъюнкции двух условий.
Очевидно, что схема результата R1 совпадает со схемой R, а
мощность R1, как правило, становится меньше мощности R, хотя бывают случаи, что она так же не изменяется. Например, если в качестве
условия взять Возраст ≤ 50 лет, то для любого студента это условие
будет истинным.
Проекция. Получим новое отношение, оставив из исходного
только некоторые свойства.
R1  <список атрибутов> (R),
где R – исходное отношение, <список атрибутов> –перечисление имен
некоторых свойств (атрибутов) отношения R, записанных через запятую, R1 – результирующее отношение.
Правильными записями проекций будут:
Фам (R),
11
Фам, Пол (R),
Nстбилета (R),
Nстбилета , Пол, Стипендия (R),
Запись <список атрибутов1> (<список атрибутов2> (R)) допустима, если в
<список атрибутов1> присутствуют только те атрибуты, которые есть
в <список атрибутов2> (<список атрибутов1><список атрибутов2>).
В этом случае
<список атрибутов1> (<список атрибутов2> (R)) = <список атрибутов1> (R)
Именно поэтому в практике решения задач последовательное
применение проекций не используется.
Принципиально, есть ли среди списка атрибутов ключевой атрибут отношения или нет. Если ключевой атрибут присутствует, то
количество кортежей в результирующем отношении будет таким же,
как и в исходном; в противном случае количество кортежей в R1, как
правило, уменьшается по сравнению с R. Например, если записать
R1  Пол (R),
то в отношении R1 будет не более двух кортежей.
Иногда оказывается выгодным переименование атрибута (см.
ниже естественное соединение). Как правило, это относится к атрибутам, играющим роль внешних ключей. Например, если код студента
(сокращенно, Кст) – первичный ключ в отношении студент, то для реализации связи "староста группы" естественно выбрать в качестве
названия внешнего ключа код старосты (Кстг). Домены этих двух атрибутов должны совпадать. При решении задачи сначала было важно
подчеркнуть, что речь идет о старосте группы (используем имя Кстг).
Но мы знаем, что староста группы это то же студент и в некоторый
момент времени нам выгодно забыть о его роли старосты и перейти к
наименованию Кст, как у обычного студента. Операция проекции может сопровождаться переименованием атрибутов
R1(<список новых имен>)  <список атрибутов> (R),
где список новых имен содержит столько же имен, что и список атрибутов, а порядок новых имен соответствует порядку имен в списке
атрибутов.
12
Более сложными представляются бинарные операции. Наиболее
востребованной бинарной операцией является естественное соединение, но чтобы осознать действие этой операции подойдем к ней постепенно, рассмотрев предварительно три другие операции.
Декартово произведение (). Пусть имеются два отношения R1
и R2 со схемами R1(А1,…,Аn) и R2(В1,…,Вm) и соответственно мощностями N и M. Декартовым произведениемэтих отношений называется
отношение R3(А1,…,Аn,В1,…,Вm), которое содержит все возможные
комбинации кортежей из R1 и R2. Мощность отношения R3 – M*N.
Первичным ключом R3 можно взять совокупность первичных ключей
отношений R1 и R2.
Может случиться, что в R1 и R2 есть совпадающие по имени атрибуты: R1(А1,А2,…,Аn) и R2(А1,В2,…,Вm). Чтобы их различать в результате R3 в схему R3 включим эти имена с указанием имен отношений,
отделив их точкой R3(R1.А1,А2,…,Аn,R2.А1,В2,…,Вm).
Пусть мы имеем два отношения: СТУДЕНТ(Кст, Фам, Стип,
Nгр) и ГРУППА(Nгр, Спец, Кстг). Здесь Кст – код студентов, в качестве которого можно рассматривать номер студенческого билета, Фио
– его фамилия, СТУДЕНТ.Nгр – номер группы, в которой студент
учится, Спец – название специальности, которой обучаются все студенты группы, Кстг – код студента, являющегося старостой группы.
СТУДЕНТ
Кст
105
318
216
418
Фио
Петров
Иванов
Сидоров
Алексеев
ГРУППА
Nгр
3
2
2
3
Nгр
2
1
3
Спец
Физика
Химия
Матем
Тогда СТ_ГР1  СТУДЕНТ  ГРУППА примет вид.
СТ_ГР1
Кст
105
318
216
418
105
318
216
418
105
Фио
Петров
Иванов
Сидоров
Алексеев
Петров
Иванов
Сидоров
Алексеев
Петров
СТУДЕНТ.Nгр
3
2
2
3
3
2
2
3
3
13
ГРУППА.Nгр
2
2
2
2
1
1
1
1
3
Спец
Физика
Физика
Физика
Физика
Химия
Химия
Химия
Химия
Матем
Кстг
216
216
216
216
Nil
Nil
Nil
Nil
105
Кстг
216
Nil
105
318
216
418
Иванов
Сидоров
Алексеев
2
2
3
3
3
3
Матем
Матем
Матем
105
105
105
-соединение (><). Отношение R3(А1,…,Аn,В1,…,Вm)
R3(А1,…,Аn,В1,…,Вm)  R1(А1,…,Аn) ><<условие> R2(В1,…,Вm)
называется -соединением относительно R1(А1,…,Аn) и R2(В1,…,Вm),
если из всех кортежей декартова произведения R1(А1,…,Аn) и
R2(В1,…,Вm) остаются только те, которые удовлетворяют заданному
условию. По получаемому результату -соединение эквивалентно
применению двух операций
R3(А1,…,Аn,В1,…,Вm)  <условие> (R1(А1,…,Аn)  R2(В1,…,Вm)),
из чего делается вывод о схеме и мощности результата.
Существует ограничение на правило записи условия. Пусть
А1,…,Аn,В1,…,Вm атрибуты отношений. Тогда правильными условиями
будут:
 F = Аi op Bj, где i[1,n], j[1,m], op – одна из операций сравнения
(<, , =, , , >). Естественно предположение, что домены Аi и Bj
сравнимы.
 Если F1 и F2 – условия, то F1  F2, F1  F2 также условия.
В нашем примере
СТ_ГР2  СТУДЕНТ >< СТУДЕНТ.Nгр  ГРУППА.Nгр ГРУППА
получится из декартова произведения вычеркиванием соответствующих кортежей, для которых не выполнено условие.
СТ_ГР2
Кст
105
318
216
418
105
318
216
418
105
318
216
418
Фио
Петров
Иванов
Сидоров
Алексеев
Петров
Иванов
Сидоров
Алексеев
Петров
Иванов
Сидоров
Алексеев
СТУДЕНТ.Nгр
3
2
2
3
3
2
2
3
3
2
2
3
и примет вид.
14
ГРУППА.Nгр
2
2
2
2
1
1
1
1
3
3
3
3
Спец
Физика
Физика
Физика
Физика
Химия
Химия
Химия
Химия
Матем
Матем
Матем
Матем
Кстг
216
216
216
216
Nil
Nil
Nil
Nil
105
105
105
105
СТ_ГР2
Кст
318
216
105
318
216
418
Фио
Иванов
Сидоров
Петров
Иванов
Сидоров
Алексеев
СТУДЕНТ.Nгр
2
2
3
2
2
3
ГРУППА.Nгр
2
2
3
3
3
3
Спец
Физика
Физика
Матем
Матем
Матем
Матем
Кстг
216
216
105
105
105
105
Equi-соединение отличается от -соединения только правилом
записи условия (обозначение тоже, что и для -соединения). При записи условия Equi-соединения можно пользоваться только конъюнкцией
и только одной операцией сравнения – сравнением на равенство.
В нашем примере
СТ_ГР3  СТУДЕНТ >< СТУДЕНТ.Nгр = ГРУППА.Nгр ГРУППА
примет вид.
СТ_ГР3
Кст
318
216
105
418
Фио
Иванов
Сидоров
Петров
Алексеев
СТУДЕНТ.Nгр
2
2
3
3
ГРУППА.Nгр
2
2
3
3
Спец
Физика
Физика
Матем
Матем
Кстар
216
216
105
105
Естественное соединение (*). Так как в Equi-соединении при
записи условия допускается только конъюнкция сравнений атрибутов,
то в результирующем отношении мы получим одну (или несколько)
пар атрибутов, значения которых в каждом из кортежей совпадают.
Естественно, один атрибут из пары совпадающих атрибутов не несет
дополнительной смысловой нагрузки и может быть удален из результата. Более того, предполагается, что названия сравниваемых атрибутов совпадают, что позволяет определить естественное соединение
следующим образом. Пусть даны два отношения R1(C1,…,Ck,A1,…,An)
и R2(C1,…,Ck,B1,…,Bm). Тогда естественное соединение
R3(C1,…,Ck,A1,…,An,B1,…,Bm) 
R1(C1,…,Ck,A1,…,An) * R2(C1,…,Ck,B1,…,Bm)
эквивалентно следующей записи
R3 
 C ,,C
1
k
, A1 ,, A n , B1 ,, B m
( b ( R1 R 2)) ,
Где b – условие попарного совпадения значений атрибутов C1,…,Ck в
отношениях R1 и R2.
В нашем примере
15
СТ_ГР  СТУДЕНТ ><СТУДЕНТ.Nгр  ГРУППА.Nгр ГРУППА
примет вид
СТ_ГР
Кст
318
216
105
418
Фио
Иванов
Сидоров
Петров
Алексеев
Nгр
2
2
3
3
Спец
Физика
Физика
Матем
Матем
Кстг
216
216
105
105
Если бы схема отношения ГРУППА была задана в виде ГРУППА(Nгр, Спец, Кст), то естественное произведение было бы выполнено по совпадению значений двух атрибутов "Кст" и "Nгр" и результат
принял бы вид
СТ_ГР4
Кст
216
105
Фио
Сидоров
Петров
Nгр
2
3
Спец
Физика
Матем
что соответствует задаче: получить номера групп с указанием специальности и кода и фамилии старосты.
1.5 Агрегативные функции.
Рассмотренные выше операции реляционной алгебры имели одну характерную особенность: атрибуты результата, их ролевые характеристики и, соответственно, их домены были получены из исходных
отношений.
Однако при решении задач достаточно часто возникает необходимость получить информацию, касающуюся значений нескольких
кортежей исходного отношения. Таким образом, в результирующем
отношении появляются атрибуты, которые либо имеют домен, отсутствующий в исходном отношении, либо домен тот же, но атрибут имеет другую ролевую характеристику. По этой причине агрегативные
функции, не являясь в прямом смысле операциями реляционной алгебры, используются наравне с ними при решении задач.
Общий вид агрегативной функции
R1(<список атрибутов>,<список имен>) 
<список атрибутов>
F<список функций> (R)
где <список атрибутов> – имена атрибутов из R, по которым происходит агрегация кортежей отношения R; <список функций> – названия
16
функций, используемых при агрегации; <список имен> – имена, которыми называются атрибуты, соответствующие списку функций.
Агрегативные функции работают по следующему принципу.
Рассмотрим отношение R2  <список атрибутов> (R). Так как одинаковых
кортежей в отношении быть не может, то мы получим новое отношение, мощность которого равна количеству различных комбинаций значений по списку атрибутов отношения R. Именно такова будет мощность отношения R1. Можно сказать, что два отношения <список атрибутов> (R) и <список атрибутов> (R1) совпадают. Далее допустим, что все кортежи отношения R упорядочены по комбинации значений атрибутов
из списка, то есть сначала расположены (сгруппированы, агрегированы – отсюда и название) все кортежи, имеющие одинаковые значения
атрибутов из списка, потом все кортежи, имеющие другую комбинацию значений атрибутов из списка, потом третью и т.д. Тогда для каждой комбинации одинаковых значений атрибутов из списка могут быть
вычислены значения следующих функций
 count(A) – количество кортежей, имеющих значение атрибута А
из его домена4;
 max(A), min(A) – выбирается максимальное (минимальное) значение атрибута А;
 sum(A) – вычисляется сумма значений атрибута А;
 avg(A) – вычисляется среднее значение атрибута А (sum(A) /
count(A)).
Естественно, что sum(A) и avg(A) определены только для атрибутов, домен которых содержит числовые значения.
В качестве примера рассмотрим несколько измененное отношение СТУДЕНТ
СТУДЕНТ
Кст
105
318
Фио
Петров
Иванов
Nгр
3
2
Стипендия
600.00
800.00
В некоторых случаях значением атрибута А в кортеже может быть значение
NIL, не входящее в домен. В этом случае этот кортеж в подсчет количества
кортежей не входит. Наиболее часто количество кортежей подсчитывается по
ключевым атрибутам, которые значение NIL не принимают. В этом случае
функция count() записывается без имени атрибута.
4
17
216
163
258
436
418
Сидоров
Захаров
Баева
Кудрина
Алексеев
2
3
2
2
3
1000.00
600.00
800.00
400.00
300.00
Поставим задачу: показать для каждой группы (их всего две:
вторая и третья) количество студентов, максимальную и среднюю стипендию. Решение следует записать следующим образом.
R1(Nгр, Численность, Макс_стип, Средняя_стип)
Nгр
F count, max(стипендия),avg(стипендия)(R)
Результат примет вид
R1
Nгр
2
3
Численность
4
3
Макс_стип
1000.00
600.00
Средняя_стип
750.00
500.00
1.6 Дополнительные операции.
В некоторых ситуациях бывает полезным нарушить правило выполнение таких операций как объединение и соединение, для чего вводятся разновидности этих операций.
Внешнее объединение (==). Может случиться, что схемы двух
отношений совпадают частично, т.е. часть атрибутов совпадает, а
часть различается. Например, имеем СТУДЕНТ(Код, Фио, Стипендия,
Nгр) и ПЕДАГОГ(Код, Фио, Зарплата, Nкаф). В данном примере мы
специально выбрали одинаковое написание первичного ключа "Код".
Если можно предположить совпадение доменов атрибутов "Стипендия" и "Зарплата", то рассчитывать на совпадение доменов для "Nгр" и
"Nкаф" не приходится, а, значит, объединить эти два отношения нельзя. При желании можно выполнить внешнее объединение, которое
предполагает выравнивание схем отношений добавлением в каждое из
них недостающих атрибутов из другого и заполнением значений этих
атрибутов в кортежах значением Nil, после чего объединение выполняется обычным образом. Следует отметить, что при таком объединении встает много побочных проблем. Что считать первичным ключом,
не нарушается ли правило функциональной зависимости и т.п. Именно
поэтому, внешнее объединение если и применяется, то крайне осторожно.
18
Внешнее соединение (=><=). Если внешнее объединение анализирует схемы отношений, то внешнее соединение анализирует,
насколько жестко следует подходить к оставлению кортежей в результате. Если мы обратимся, к примеру, рассмотренному в конце раздела
1.4
СТУДЕНТ
Кст
105
318
216
418
Фио
Петров
Иванов
Сидоров
Алексеев
ГРУППА
Nгр
3
2
2
3
Nгр
2
1
3
Спец
Физика
Химия
Матем
Кст
216
Nil
105
то обнаружим, что в результате естественного соединения 5 пропала
информация о первой группе, так как староста в ней пока не назначен.
Воспользовавшись внешним соединением (в данном случае правым
(><=)), мы оставим в результате информацию о первой группе, несмотря на то, что этому кортежу в отношении ГРУППА не соответствует ни один кортеж из отношения СТУДЕНТ. Значения атрибутов
отношения СТУДЕНТ для этого кортежа заполняются значением Nil.
СТ_ГР5
Кст
216
Nil
105
Фио
Сидоров
Nil
Петров
Nгр
2
1
3
Спец
Физика
Химия
Матем
Из объяснения примера понятно, что для левого внешнего соединения (=><) за основу берутся все кортежи левого отношения, а
внешнее соединение предполагает, что не происходит потери кортежей, как левого, так и правого отношений.
2. Описание модели
Что представляет собой решение задач, когда мы имеем дело с
базами данных? Естественно, что база данных должна существовать.
Следовательно, кто-то должен ее спроектировать. Как правило, проектирование базы данных и даже, возникающая по мере ее эксплуатации
необходимость изменения ее структуры, представляет разовую работу,
выполнение которой падает на специально подготовленных специалистов – проектировщиков базы данных. Более широкий круг пользователей вынужден чаще всего писать запросы к существующей базе дан5
Атрибуг Кстг специально изменен на Кст.
19
ных, то есть по имеющейся структуре базы данных написать программу, позволяющую получить новое отношение, содержащее кортежи,
отвечающие требованиям, поставленным в условии задачи. Как правило, в условии задачи на естественном языке говорится, каким образом
надо скомпоновать хранимые данные и какие ограничения на эти данные следует учесть. Необходимым условием для успешного решения
задач является четкое представление о том, как хранимые данные распределены по отношениям и как реализованы связи между различными объектами.
Поэтому в этом разделе постараемся подробно описать модель, в
рамках которой будут ставиться и разбираться задачи. Естественно,
модель выбрана в той области, которая в большой степени известна
студентам. Безусловно, предлагаемая модель является весьма упрощенной по сравнению с той, которая реально используется в жизни.
2.1 Концептуальная модель
В модели должна храниться информация о студентах. О каждом
студенте известны: номер его студенческого билета, фамилия, инициалы, пол, дата рождения и выплачиваемая ему стипендия. Все студенты
распределены по группам. Как правило, один из студентов в группе
выбирается старостой, чтобы представлять интересы группы в деканате. Иногда назначение старосты затягивается, и мы должны знать дату
его назначения. Может случиться, что студенты нескольких групп
учатся одинаковой специальности и тогда группы объединяются в общий поток. В базе данных должно храниться название специальности,
которую получат студенты по окончании обучения. Для потока расписаны все дисциплины, которые предписаны для изучения каждым студентом любой из групп, относящихся к потоку. Эти дисциплины составляют типовой учебный план. Общая трудоемкость дисциплин типового учебного плана является минимальной для получения соответствующей степени. Однако любой студент с согласия кафедры может
заменить часть дисциплин другими и/или добавить несколько дополнительных дисциплин, составив свой индивидуальный учебный план.
В данной модели мы будем считать, что, в принципе, студент может
заменить вообще все дисциплины типового плана, но индивидуальный
20
учебный план составляется сразу на все время обучения. По мере изучения дисциплины и проведения итогового контроля студенту выставляется оценка его знаний с указанием даты получения оценки. По дисциплинам, по которым имеются неудовлетворительные оценки, могут
быть проведены дополнительные занятия и новый итоговый контроль,
что отражается новой оценкой, полученной в другой день. За преподавание дисциплины отвечает кафедра (какой именно преподаватель нам
не важно; будем считать, что за все отвечает заведующий кафедрой).
За полгода до окончания обучения студент получает на кафедре тему
выпускной работы и по результатам защиты ему выставляется оценка
с указанием даты ее получения. Мы не предусматриваем неудовлетворительных оценок на защите. В начале обучения для тех студентов,
кому трудно даются базовые дисциплины могут назначить для помощи
студента старшего курса, причем только одного. Если студент переводится из одного потока в другой (меняет специальность), то выбирает
он все дисциплины в соответствии с правилами нового потока, а среди
оцененных могут остаться дисциплины старого учебного плана.
Концептуальная модель приведена на схеме 1.
Кст, Фам, Дрожд,
Пол, Стипендия
Nгруппы
1
ПРЕДСТАВЛЯЕТ
СТУДЕНТ
1
Кому
Кто
1
N
ПОМОГАЕТ
ГРУППА
1
Дата
N
ВХОДИТ
Nпот, Спец
ВЫПУСКАЕТ
M
Дата, Оценка
1
ПОТОК
M
N
N
ОЦЕНЕН
ВЫБИРАЕТ
M
Тема, Дата,
Оценка
КАФЕДРА
УЧИТСЯ_В
1
M
ОТВЕЧАЕТ
Nкафедры, Название
N
N
ИЗУЧАЕТ
M
N
ДИСЦИПЛИНА
Nдисц, Название, Труд, Цикл
Схема 1. Концептуальная модель
21
На схеме типы объектов указаны в прямоугольниках, а типы
связей – в ромбах. Все типы связей в данной модели бинарные и около
каждой из них указана кардинальная пропорция: возможное максимальное количество экземпляров типа объекта, участвующих в данном
типе связи. Например, тип связи "УЧИТСЯ_В" между типами объектов "СТУДЕНТ" и "ГРУППА" означает, что любой из студентов
участвует в этом типе связи не более одного раза (т.е. учится только в
одной группе), а любая группа – несколько раз (т.е. в ней учатся несколько студентов, хотя может быть и один). Одинарная линия, соединяющая прямоугольник и ромб означает, что не обязательно каждый
экземпляр типа объекта участвует в связи, а двойная линия – обязательное участие.
Роль каждого типа объекта во всех типах связей очевидна, кроме
типа связи "ПОМОГАЕТ". Так как тип объекта "СТУДЕНТ" участвует
в этом типе связи дважды (рекурсивный тип связи), то это означает,
что один из студентов играет роль помогающего, а другой – роль того,
которому помогают (это отмечено текстом на линиях). В данном случае отмечено, что студент, который выступает в роли того, которому
помогают, может участвовать в этом типе связи не более одного раза
(ему может помогать только один студент), а тот, который помогает,
может помогать нескольким студентам.
В концептуальной модели в овалах указаны атрибуты типов
объектов и типов связей. Атрибуты типов объектов, как правило, не
вызывают трудностей у студентов, поэтому остановимся только на
атрибутах типов связей, характеризующих не каждый объект в отдельности, а именно связь между всеми объектами, участвующими в этом
типе связи. Особенно отметим многозначный (в двойном овале) составной атрибут типа связи "ОЦЕНЕН", что подчеркивает, что любой
студент по одной и той же дисциплине может иметь несколько оценок
полученных в разные дни. Как правило, это пересдачи неудов на положительную оценку, но, в принципе, это может быть и пересдача с
целью улучшения рейтинга. Для определенности будем считать, что со
временем оценка не может быть уменьшена.
22
2.2 Реляционная модель
Концептуальная модель хороша своей наглядностью. Но в реляционной базе данных информация структурируется по отношениям в
соответствии с правилами нормализации. Для правильного решения
задач (написания выражения или алгоритма, по которому в одном отношении собираются данные из нескольких исходных отношений)
необходимо четко понимать как, представленные в концептуальной
модели связи, реализованы в реляционной модели. Так как при разборе
задач нам придется часто писать названия типов объектов, связей и
атрибутов, то договоримся о сокращениях в их написании.
СТ – СТУДЕНТ
ГР – ГРУППА
ПТ – ПОТОК
КФ – КАФЕДРА
ДЦ – ДИСЦИПЛИНА
ВЫБ – ВЫБИРАЕТ
Кст – код (шифр, номер студенческого билета) студента
Фам – фамилия студента
Дрожд – дата рождения
Стип – стипендия
Ккур – код помогающего студента
Кстг – код старосты группы
Дстг – дата назначения старосты
Назв – название кафедры или дисциплины
ИЗЧ – ИЗУЧАЕТ
ОТВ – ОТВЕЧАЕТ
ОЦН – ОЦЕНЕН.
Труд – трудоемкость дисциплины
Цикл – цикл, к которому относится дисциплина; один из трех:
ГСЭ – гуманитарный, ЕН – естественно-научный, СД – специальный
Спец – название направления
(специальности)
Nгр, Nпт, Nкф, Nдц – номера соответственно группы, потока, кафедры и дисциплины.
На схеме 2 приведена реляционная модель, соответствующая
концептуальной модели на схеме 1.
Жирным шрифтом в реляционной модели выделены первичные
ключи каждого отношения, а курсивом – внешние связи. СТ.Ккур реализует тип связи "ПОМОГАЕТ", СТ.Nгр – "УЧИТСЯ В", СТ.Nкф –
"ВЫПУСКАЕТ", ГР.Nпт – "ВХОДИТ", Кстг – "ПРЕДСТАВЛЯЕТ". В
связях типа M:N (ИЗЧ, ОЦН, ОТВ, ВЫБ), реализованных отдельными
отношениями, жирным курсивом выделены первичные ключи, относящихся к этим связям типов объектов.
СТ(Кст, Фам, Дрожд, Пол, Стип, Ккур, Nгр, Nкф, Тема, Дата, Оценка)
ГР(Nгр, Nпт, Кстг, Дстг)
ПТ(Nпт, Спец)
КФ(Nкф, Назв)
ДЦ(Nдц, Назв, Труд)
ИЗЧ(Nпт, Nдц)
ВЫБ(Кст, Nдц)
23
ОЦН(Кст, Nдц, Дата, Оценка)6
ОТВ(Nкф, Nдц)
Схема 2. Реляционная модель данных
3 Решение задач в реляционной алгебре
Среди решаемых задач условно можно выделить три различных
типа задач, хотя, конечно, большинство реальных задач являются
смешанными, содержат элементы всех трех типов. Однако общим местом при решении задач является умение студента высказать, сформулировать, что же представляет собой полученное как промежуточный
результат отношение. В этой главе рассмотрим каждый из типов задач
по мере увеличения их сложности.
3.1 Простые задачи
Как мы можем охарактеризовать класс простых задач в реляционной алгебре? В общем виде это можно выразить следующим образом. Требуется собрать в одном отношении свойства (как правило)
различных объектов, причем, если и заданы какие либо дополнительные условия, то они относятся к значениям кортежей, анализируемых
независимо друг от друга.
Рассмотрим несколько примеров, постепенно усложняя поставленную задачу.
Задача 1. Выдать фамилии студентов, родившихся до 1 сентября
1990 года.
Задача 2. Выдать фамилии студентов, не получающих стипендию.
Задача 3. Сформировать список студентов – мужчин старше 20
лет, получающих стипендию.
Задача 4. Дать список групп, для которых староста в текущем
учебном году либо не назначен, либо назначен позже 10 дней
после начала учебы.
Прежде всего, отметим, что "выдать", "сформировать список",
"дать список", "дать перечень" и т.п. – разные формы одного и того же
утверждения: получить отношение, включающее требуемые атрибуты,
Так как при этой связи типа M:N имеется единственный многозначный атрибут, то создается одно отношение, в первичный ключ которого входит подходящий атрибут связи.
6
24
все кортежи которого удовлетворяют приведенным в задаче требованиям.
Приведенные четыре задачи действительно очень простые, так
как анализируют информацию только одного отношения, а успешное
решение зависит лишь от умения правильно записать условие селекции на кортежи этого отношения.
Рассмотрим решения.
Первые две задачи просят выдать фамилии студентов. Здесь
точно указано, что требуется получить – отношение, включающее
единственный атрибут Фам7. Этот атрибут входит в отношение СТ,
следовательно, надо будет применить операцию Фам к отношению,
которое содержит требуемые кортежи.
В задаче 1 условием является факт, что дата рождения меньше
указанной. Следовательно, решение может быть записано так.
R1  Дрожд<"01.09.90" (СТ),
REZ  Фам (R1)
Отметим, что любую константу мы будем писать в двойных кавычках. Напомним, схема R1 совпадает со схемой СТ и, следовательно, взятие проекции правомочно. Этот же результат может быть записан одной строкой, одним выражением
REZ  Фам (Дрожд<"01.09.90" (СТ))
В задаче 2 условием является отсутствие стипендии, что означает, что стипендия студенту не назначалась, т.е. ее значение задано константой nil. В остальном решение очень похоже на решение задачи 1.
REZ  Фам (Стип=nil (СТ))
В третьей задаче четко не обозначено что же (какие атрибуты)
следует собрать в результирующем отношении. Первое о чем следует
задуматься – необходимость включения в результат не только фамилии студента, но и атрибута, играющего роль ключевого (в нашем случае Кст). Иначе различные студенты, обладающие одинаковой фамилией, останутся в единственном экземпляре. Если на занятии не было
дополнительного уточнения списка атрибутов результата, то естеТак как ничего не говорится, как быть, если несколько студентов имеют одинаковую фамилию, то мы об этом не задумываемся.
7
25
ственно включить в результат также Дрожд и Стип, а Пол не включать,
так как у всех кортежей результата он должен быть одинаков – мужской. Обратим внимание, что атрибута Возраст в нашей модели не
предусмотрено, но всегда существует возможность получить любую
дату (функция date(день, месяц, год)8). Решение задачи может быть
записано в виде
REZ  Кст,Фам,Дрожд,Стип (Стипnil and Дрожд<date(day(dt),month(dt),year(dt)-20) (СТ))
Четвертая задача мало чем отличается от третьей
REZ  Nгр (Дстг=nil or Дстг>date(10,9,year(dt)-if(month(dt)>8,0,1)) (ГР)),
Следующая серия простых задач рассматривает соединение двух
типов объектов, при котором часть атрибутов берется из одного типа
объекта, а остальные из другого.
Задача 5. Дать номера групп с указанием фамилии старосты.
Задача 6. Привести перечень групп с указанием названия специальности, по которой учатся студенты этих групп.
Задача 7. Дать перечень студентов, тем их выпускных работ и
название выпускающих кафедр.
При решении этих задач (также как и последующих) важно выбрать именно тот атрибут реализации связи, о котором говорится в
условии задачи.
В задаче 5 фамилия старосты хранится в отношении СТ, а связь
ПРЕДСТАВЛЯЕТ реализована атрибутом Кстг в отношении ГР. Поэтому необходимо соединить отношения СТ и ГР при условии, что
значение кода студента в отношении СТ совпадает с кодом старосты в
отношении ГР, что записывается следующим образом
R1  СТ ><СТ.Кст=ГР.Кстг ГР,
REZ  ГР.Nгр, СТ.Фам (R1)
Напомним, что, если староста еще не назначен, то информации
об этой группе в результирующем отношении не будет. Если бы мы
хотели иметь информацию обо всех группах, не зависимо от назначе-
Если параметры отсутствуют, то получаем текущую дату (обозначим ее dt).
Кроме того, от любой даты можно вычислить день (day(дата)), месяц
(month(дата)) и год (year(дата)), а также добавить/вычесть указанное количество дней.
8
26
ния старосты, то решение следовало бы записать через правое внешнее
соединение (запишем его одним выражением)
REZ  ГР.Nгр, СТ.Фам (СТ ><= СТ.Кст=ГР.Кстг ГР)
Решение задачи 6 можно записать в виде
REZ  ГР.Nгр, ПТ.Спец (ПТ * ГР),
где естественное соединение проходит по единственному совпадающему атрибуту Nпт.
Решение задачи 7 можно записать в виде
REZ  СТ.Фам, Ст.Тема, КФ.Назв (СТ * КФ),
где естественное соединение проходит по единственному совпадающему атрибуту Nкф.
Далее по степени усложнения идут задачи, в которых типы объектов связаны между собой связью с кардинальной пропорцией M:N,
реализуемой в реляционной модели отдельным отношением.
Задача 8. Привести названия дисциплин, изучаемых по специальности "Химия".
Задача 9. Дать список названий кафедр, и названий дисциплин из
цикла "ЕН", за преподавание которых она отвечает.
Задача 10. Дать список студентов, получивших оценку 4 или 5 по
дисциплине "Матанализ".
Решение этих задач можно представить в виде соединения трех
отношений. Внимательный студент, наверное, заметил, что, если мы
уже получили отношение, содержащее первичные ключи некоторого
типа объекта, то для получения значений любых других атрибутов
этих объектов достаточно соединить это отношение с отношением соответствующего типа объекта и взять проекцию по требуемым атрибутам. Фактически, отношение, реализующее связь между двумя типами
объектов, характеристики которых требуются в задаче, как раз и содержит первичные ключи. Решение задачи 8 можно записать в виде.
R1  ИЗЧ.Nдц, ПТ.Спец (ИЗЧ * ПТ),
R2  ДЦ.Назв, R1.Спец (R1 * ДЦ),
REZ   R2.Назв (R2.Спец="Химия" (R2))
Так как отношение ИЗЧ содержит первичны ключи как потока,
так и дисциплины, то естественное соединение в первой строке прой27
дет по единственному совпадающему атрибуту (Nпт) и, следовательно,
R1 содержит перечень номеров дисциплин с указанием специальностей, студентами которых они изучаются 9. Аналогичная операция, но
уже с заменой номеров дисциплин на их названия получатся после
выполнения второй строки. И, наконец, третья строка оставит только
названия дисциплин, которые изучаются студентами специальности
"Химия".
Это решение правильное, но не очень эффективное. Напомним,
что по временным затратам естественное соединение близко к декартовому произведению, то есть, как правило, достаточно большое. Более эффективной окажется следующая логика решения задачи.
R1  Nпт (Спец="Химия" (ПТ)), сразу сокращаем мощность ПТ
R2  Nдц (R1 * ИЗЧ),
REZ  Назв (R2 * ДЦ)
Здесь мы сначала получим отношение, содержащее номер потока "Химия", затем номера дисциплин, изучаемых студентами этого
потока и, наконец, названия дисциплин, о которых говорится в условии задачи.
Эту логику рассуждений – по известным ограничениям на объекты получить их первичные ключи, по которым через связи получить
первичные ключи объектов, характеристики которых нас интересуют и
затем значения самих характеристик – мы будем использовать довольно часто.
Конечно, решение этой задачи можно записать одной строкой
REZ  ДЦ.Назв ((ИЗЧ.Nдц ((ПТ.Nпт (ПТ.Спец="Химия" (ПТ))) * ИЗЧ)) * ДЦ),
но, как правило, оно менее наглядно и стремиться к этому мы не будем.
Без подробных объяснений приведем решения двух других задач.
Решение задачи 9 можно записать в виде
Напомним, что отношение это множество. В данном случае R1 – множество
пар: номер дисциплины, название специальности. Однако без необходимости
повторять это мы не будем.
9
28
R1  ДЦ.Nдц (ДЦ.Цикл="ЕН" (ДЦ)) – номера дисциплин, относящихся к
"ЕН",
R2  ОТВ.Nкф (R1 * ОТВ) – номера кафедр, отвечающих за эти дисциплины,
REZ  КФ.Назв (R2 * КФ) – названия кафедр, соответствующие их
номерам
Решение задачи 10 можно записать в виде
R1  ДЦ.Nдц (ДЦ.Назв="Матанализ" (ДЦ)) – номера дисциплин с названием "Матанализ"10,
R2  ОЦН.Кст (ОЦН.Оценка >= 4 (R1 * ОЦН)) – коды студентов, получивших оценку 4 или 5 по этим дисциплинам,
REZ  СТ.Фам (R2 * CТ) – фамилии этих студентов.
Освоив эти достаточно простые задачи, мы можем приступить к
решению простых задач общего характера.
Для решения простых задач общего характера требуется определить цепочку отношений, в которых заложены требуемые характеристики и упомянутые в условии задачи связи. Например, в задаче 11 эту
цепочку составляют отношения: ДЦ (в нем есть название дисциплин),
ИЗЧ (номера потоков, изучающих эти дисциплины), ГР (номера групп,
входящих в потоки, так как связь ВХОДИТ реализована атрибутом
Nпт в отношении ГР), СТ (фамилии студентов, учащихся в этих группах, через связь УЧИТСЯ_В, реализованную атрибутом Nгр в СТ).
Задача 11. Дать список студентов, изучающих дисциплину "Информатика".
Задача 12. Дать фамилии старост групп и названия специальностей
для потоков со специальностью "Химия" или "Физика".
Задача 13. Привести перечень названий кафедр, названий дисциплин, за которые они отвечают и фамилии студентов, получивших двойки по этим дисциплинам за последнюю неделю.
Решение задачи 11 можно записать в виде
R1  ДЦ.Nдц (ДЦ.Назв="Информатика" (ДЦ)) – номера дисциплин с названием "Информатика",
Так как может быть несколько различных дисциплин с одинаковым названием, но разными номерами, мы используем множественное число
10
29
R2  ИЗЧ.Nпт (R1 * ИЗЧ) – номера потоков, студенты которых изучают дисциплины, номера которых собраны в отношении R1,
R3  ГР.Nгр (R2 * ГР) – номера групп, входящих в потоки, номера
которых собраны в отношении R2,
REZ  СТ.Фам (R3 * CТ) – фамилии студентов, учащихся в группах,
номера которых собраны в отношении R3.
Обратите внимание, что воспользоваться более короткой связью
ОЦЕНЕН между отношениями ДЦ и СТ нельзя. Не все студенты, изучающие дисциплину, уже сдавали по ней экзамен и получили оценку, в
результате чего может быть потеряна часть информации.
Решение задачи 12 можно записать в виде
R1  ПТ.Nпт, ПТ.Назв (Назв="Физика" or Назв="Химия" (ПТ)) – номера потоков с
названиями "Физика" или "Химия",
R2(Кст, Назв)   ГР.Кстг, R1.Назв(R1 * ГР) –коды старост групп и
названия специальностей, которым обучаются студенты групп,
относящихся к потокам, номера которых собраны в отношении
R1; мы воспользовались переименованием атрибутов в R2, чтобы в следующем операторе применить естественное соединение.
REZ  СТ.Фам, R2.Назв (R2 * CТ) – фамилии старост групп и названия
специальностей.
Решение задачи 13 может быть записано в виде
R1  ОЦН.Кст, ОЦН.Nдц (Оценка=2 and Дата>date()-7 (ОЦН)) – коды студентов и
номера дисциплин, по которым этими студентами были получены двойки за последнюю неделю,
R2  R1.Кст, ДЦ.Nдц, ДЦ.Назв (R1 * ДЦ) – к кодам студентов и номерам
дисциплин из R1 добавлены названия этих дисциплин.
R3(Кст, Назв_д, Назв_к)  R1.Кст, ДЦ.Назв, КФ.Назв (R2 * КФ) – к кодам
студентов и названиям дисциплин из R2 добавлены названия
кафедр, отвечающих за эти дисциплины. Естественное соединение прошло по атрибуту Кдц. Переименование атрибутов выполнено, чтобы не было в отношении R3 двух атрибутов с одинаковым названием.
30
REZ  СТ.Фам, R3.Назв_д, R3.Назв_к (R3 * CТ) – фамилии студентов, названия дисциплин и отвечающих за них кафедр, по которым за последнюю неделю получены двойки.
3.2 Задачи на сравнение множеств объектов
Следующий тип задач – задачи на сравнение двух множеств. Как
правило, в формулировке таких задач присутствуют слова "все",
"только", "все и только". Текст задач этого типа построен таким образом, что в нем записана необходимость выделения двух отношений
(множеств) с одинаковой структурой (схемой), причем одно из этих
отношений должно быть подмножеством другого (АВ). При реализации на компьютере условие, что все элементы одного отношения (А)
являются элементами другого (В), легче всего реализуется попыткой
создания разности двух отношений (А-В) (из меньшего вычитается
большее), после чего полученное отношение анализируется на пустоту.
При решении задач на сравнение двух отношений, таким образом, требуется:
 понять, что задача сводится к сравнению двух отношений;
 сформулировать две подзадачи, описывающие эти два отношения;
 правильно оценить какое из отношений должно являться подмножеством другого (либо они должны совпадать)
Задача 14. Дать фамилии студентов, выбравших все дисциплины
типового учебного плана.
Задача 15. Дать фамилии старост групп обучающихся только по
типовым учебным планам.
Задача 16. Названия специальностей, все студенты которых учатся
по типовым учебным планам.
Начнем с задачи 14. Какие два отношения скрыты в этой формулировке? На самом деле для каждого студента мы должны сравнить
множество дисциплин типового учебного плана для выбранной им
специальности и множество дисциплин, которые он фактически выбрал. Если множество дисциплин, которые он фактически выбрал,
включает соответствующее множество дисциплин типового учебного
плана, то это и означает, что он изучает все дисциплины типового
31
учебного плана. Однако в реляционной алгебре мы не можем организовать цикл по всем студентам с целью проверки того, как соотносятся
эти два множества для каждого из них. Поэтому реально мы должны
рассматривать два множества пар, элементами которых являются пары
значений атрибутов – код студента и номер дисциплины:
 отношение R1(Кст, Nдц) – множество всех студентов с указанием
для каждого из них номеров дисциплин, которые он должен был бы
изучить по типовому учебному плану,
 отношение R2(Кст, Nдц) – множество всех студентов с указанием
для каждого из них номеров дисциплин, которые он выбрал для изучения.
Еще раз обратим внимание студента, что схемы отношений одинаковы, но получены они должны быть с использованием различных
связей между типами объектов СТУДЕНТ и ДИСЦИПЛИНА. В первом случае это длинная цепочка: СТУДЕНТ, УЧИТСЯ_В, ГРУППА,
ВХОДИТ, ПОТОК, ИЗУЧАЕТ, ДИСЦИПЛИНА, а во втором – СТУДЕНТ, ВЫБИРАЕТ, ДИСЦИПЛИНА. Подзадача получения отношения R1 относится к типу простых задач, а подзадача получения R2 вообще не требует усилий, так как R2 совпадает с отношением ВЫБ.
Что же мы получим, вычислив разность R3=R1-R2? Обратите
внимание, что если студент выбрал все дисциплины типового учебного плана, то в R3 информации об этом студенте не останется (не будет
ни одного кортежа содержащего код этого студента). Таким образом, в
R3 останутся только коды тех студентов, которые не изучают все дисциплины типового учебного плана. Следовательно, если из всех студентов убрать тех, которые попали в отношение R3, то мы получим
решение задачи 14.
Запишем теперь эти рассуждения в виде выражений реляционной алгебры.
R11  СТ.Кст, ГР.Nпт (СТ * ГР)) – коды студентов с указанием номера
потока, к которому они относятся; естественное соединение по
единственному совпадающему атрибуту Nгр.
R1  R1.Кст, ИЗЧ.Nдц (R11 * ИЗЧ) – коды студентов с указанием номеров дисциплин, которые они должны бы изучать по типовому
32
учебному плану; естественное соединение по единственному
совпадающему атрибуту Nпт.
R2  ВЫБ – это действие записано только для совпадения обозначений с используемыми при описании решения задачи.
R3  R1 - R2 – коды студентов с указанием номеров дисциплин из
типового учебного плана, которые они не выбрали для изучения.
R4  R3.Кст (R3) – коды студентов, которые не соответствуют условию задачи.
R5  СТ.Кст (СТ) - R4 – коды студентов, которые соответствуют
условию задачи.
REZ  СТ.Фам (R5 * CТ) – фамилии студентов, изучающих все дисциплины типового учебного плана.
Решение задачи 15 может быть записано в виде
R1(Кст, Nдц)  ГР.Кстг, ИЗЧ.Nдц (ГР.Кстг  Nil (ГР) * ИЗЧ) – коды старост
групп с указанием номеров дисциплин, которые они должны бы
изучать по типовому учебному плану; естественное соединение
по единственному совпадающему атрибуту Nпт.
R2  ВЫБ - R1 – коды студентов с указанием выбранных номеров
дисциплин, причем для старост групп выбранных не из типового
учебного плана.
R3  R1.Кст (R1) - R2.Кст (R2) – коды старост групп, соответствующих условию задачи.
REZ  СТ.Фам (R3 * CТ) – фамилии студентов, изучающих все дисциплины типового учебного плана.
На что следует обратить внимание при анализе решения этой задачи? Отношение R1 содержит коды всех назначенных старост групп.
Отношение R2 обо всех студентах, а не только о старостах групп. Нас
это не волнует, так как при вычитании в следующей строке алгоритма
это отношение является вычитаемым, а, значит, вся лишняя информация будет проигнорирована. При получении отношения R3 мы предварительно избавляемся от Nдц; они свою роль сыграли на предыдущем
шаге. Последний шаг – стандартный прием перехода от ключевых атрибутов (Кст) к функционально от них зависящим, требуемым по
условию задачи (Фам). Также отметим, что в задаче 14 речь шла о всех
33
дисциплинах типового учебного плана и отношение ВЫБ было вычитаемым, а в задаче 15 говорилось о старостах, изучающих только дисциплины типового учебного плана, и ВЫБ стало уменьшаемым.
Перейдем к задаче 16. Напомним, что некоторые студенты могли либо заменить часть дисциплин типового учебного плана, либо дополнить его несколькими другими. Эта задача является вариацией задачи 14. Если мы определим коды студентов с указанием номеров потоков, к которым они относятся, и дисциплин, не относящихся к типовому учебному плану, то, следовательно, мы знаем номера потоков, в
которых не все студенты учатся по типовым учебным планам. Небольшая трудность состоит в том, что отношение ВЫБ не содержит
атрибут Nпт и, следовательно, при вычитании уменьшаемое тоже не
должно содержать Nпт. Таким образом, мы вынуждены сначала получить коды студентов, которые учатся не только по типовым учебным
планам, а по этим кодам получить номера потоков, не удовлетворяющих условиям задачи и затем перейти стандартным образом к названию специальности.
Решение задачи 16 может быть записано в виде.
R11  СТ.Кст, ГР.Nпт (СТ * ГР)) – коды студентов с указанием номера
потока, к которому они относятся; естественное соединение по
единственному совпадающему атрибуту Nгр.
R1  R1.Кст, ИЗЧ.Nдц (R11 * ИЗЧ) – коды студентов с указанием номеров дисциплин, которые они должны бы изучать по типовому
учебному плану; естественное соединение по единственному
совпадающему атрибуту Nпт.
R3  R1 - ВЫБ – коды студентов с указанием номеров дисциплин
из типового учебного плана, которые они не выбрали для изучения.
R4  R11.Nпт (R3.Кст (R3) * R11) – номера потоков, не все студенты
которых соответствуют условию задачи.
REZ  ПТ.Спец ((ПТ.Nпт (ПТ) - R4) * ПТ) – названия специальностей,
все студенты которых учатся по типовым учебным планам
(условие задачи).
Следующая задача несколько отличается от предыдущих.
34
Задача 17. Номера групп, все студенты которых изучают одни и те
же дисциплины.
Трудность этой задачи в том, чтобы определить на какой набор
дисциплин следует ориентироваться, так как явно он не задан. В условии задачи говорится только о том, что нас интересуют такие группы,
в которых все студенты если и заменили некоторые дисциплины типового учебного плана, то на одни и те же. Таким образом в данной ситуации ориентиром должно служить для каждой группы множество дисциплин, выбранных хотя бы одним из студентов этой группы. Приписав это множество каждому из студентов группы и вычтя фактически
изучаемые ими дисциплины, мы получим те отклонения, которые позволят нам выделить группы, не удовлетворяющие условию задачи.
Учитывая это объяснение, решение задачи 17 можем записать в
виде.
R1  СТ.Кст, СТ.Nгр, ВЫБ.Nдц (СТ * ВЫБ) – для каждого студента указан
номер группы, в которой он учится и номер дисциплины, которую он выбрал для изучения; естественное соединение по единственному совпадающему атрибуту Кст. Таким образом, мы получили множество троек – Кст, Nгр, Nдц по фактически изучаемым дисциплинам.
R2   R1.Nгр, R1.Nдц, (R1) – избавившись от кода студента, мы получили множество пар – Nгр, Nдц, которое говорит в какой группе
хотя бы кем-то изучается та или иная дисциплина. Другими словами, для каждой группы имеем свой максимальный перечень
дисциплин, выбранный для изучения студентами группы.
R3  СТ.Кст, СТ.Nгр, R2.Nдц (СТ * R2) – это множество троек построено
так, что перечень дисциплин, изучаемых хотя бы кем-то из
группы, приписан каждому студенту этой группы; естественное
соединение по единственному совпадающему атрибуту Nгр.
R3  R1 - ВЫБ – коды студентов с указанием номеров дисциплин
из типового учебного плана, которые они не выбрали для изучения.
35
R4  R3 – R1 – остались кортежи, указывающие на студентов группы, которые не изучают дисциплины, выбранные для изучения
другими студентами этой группы.
REZ  ГР - R4.Nгр (R4) – те группы, в которых все студенты изучают
одни и те же дисциплины (условие задачи).
3.3 Задачи на применение агрегативных функций
4 Особенности записи запросов на SQL
Как минимум второе отношение упорядочивается, после чего достаточно эффективно происходит покортежное сравнение, причем, как
только в меньшем отношении (А) появляется кортеж, которого нет в
большем (В), сравнение завершается с признаком "ложь"
1.
2.
3.
4.
5.
6.
Названия специальностей, все мужчины которых выпускались
только теми кафедрами, по дисциплинам, за которые они отвечают, выпускники получили только отличные оценки.
2. Названия кафедр, выпускники которых выбрали все дисциплины, за которые кафедра отвечает.
Номера групп, все студенты которых кому-нибудь помогали.
Номера групп, всем студентам которых пришлось помогать.
Номера групп, всем студентам которых помогали только студенты других групп этого потока.
Номера групп, в которых все студенты выбрали какую-либо
дисциплину, причем ни один студент других групп потока ее
не выбрал
36
Download