Операции реляционной алгебры

 

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

При описании операций реляционной алгебры будем использовать обозначения: ИФ (ИФ1; ИФ2) — имя исходного (первого исходного; второго исходного) файла; ФР — имя файла результата.

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

Проектирование.Формальная запись:

 

 

Операция не накладывает ограничений на исходный файл. Операция предусматривает следующие действия:

· из ИФ исключаются все поля, имена которых отсутствуют в списке имен полей;

· из полученного файла удаляются повторяющиеся записи.

Пример. Пусть ИФ (КАДРЫ) содержит 4 поля:

Кадры

 

Требуется выполнить операцию

 

ФР = proj [П/Я] (КАДРЫ).

 

Тогда после выполнения операции получим результат

 

 

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

Селекция (выбор).Формальная запись:

 

Эта операция также не накладывает ограничений на ИФ. В ФР заносятся те записи из ИФ, которые удовлетворяют условию поиска. Условие представляет собой логическое выражение, связывающее значения полей ИФ.

Пример. Пусть для приведенного выше ИФ «КАДРЫ» требуется выявить сотрудников П/Я 34 170, имеющих должность «старший инженер». Для отработки такого запроса достаточно выполнить операцию:

 

 

Отметим, что данная операция не изменяет структуру ИФ. Кроме того, при такой формальной записи операции предполагается, что СУБД поддерживает отработку сложных (составных) запросов, в противном случае пришлось бы составное условие поиска отрабатывать последовательно — сначала выявить сотрудников, имеющих должность «старший инженер», а затем из них выделить тех, кто работает на П/Я 34 170 (или наоборот). Иногда такой (последовательный) порядок поиска имеет определенные преимущества — прежде всего в тех случаях, когда на сложный запрос дан отрицательный ответ и непонятно, что послужило причиной этого (в нашем примере — или нет сотрудников должности «старший инженер», или никто из них не «работает» в указанном П/Я, или такого предприятия вообще «нет» в БД).

Соединение.Формальная запись:

 

 

В реляционной алгебре определено несколько операций соединения. Мы рассмотрим так называемое естественное соединение.

Условием выполнения данной операции является наличие в соединяемых файлах одного или нескольких однотипных полей, по которым и осуществляется соединение (эти поля указываются в списке; если список пуст, соединение осуществляется по всем однотипным полям).

В ФР заносятся записи, являющиеся конкатенациями (от англ. concatenate — сцеплять, связывать) записей исходных файлов. Иными словами, в ФР попадают записи ИФ1 и ИФ2 с совпадающими значениями полей, по которым осуществляется соединение («сцепка»).

Пример 1. Пусть, помимо файла «КАДРЫ» имеется файл «ЦЕХ» в котором указаны порядковый НОМЕР сотрудника (как и в первом файле) и НОМЕР_ЦЕХА — номер цеха, в котором данный сотрудник работает.

 

 

 

Тогда после выполнения операции

 

ФР = КАДРЫ >< ЦЕХ.

 

получим

 

 

Следует обратить внимание, что в формате команды не указаны поля соединения. Следовательно, оно осуществляется по единственному однотипному полю (НОМЕР).

Пример 2. Пусть требуется выяснить, в каком цехе п/я 34 170 работает старший инженер Сидоров.

Для этого требуется выполнить операции:

 

 

В результате получим

 

Объединение.Формальная запись:

 

 

Условием выполнения операции является однотипность (одинаковая структура) исходных файлов.

В файл результата заносятся неповторяющиеся записи исходных файлов.

Пример. Пусть в БД имеются два файла: УЧ_Д_КАФЕДРЫ_1 и УЧ_Д_КАФЕДРЫ_2, в которых содержатся данные о читаемых кафедрами № 1 и № 2 учебных дисциплинах:

 

 

 

Тогда после выполнения операции объединения

 

 

получим данные об учебных дисциплинах, читаемых обеими кафедрами:

 

Напомним, что последовательность записей в файлах БД роли не играет.

Разность (вычитание).Формальная запись:

 

 

Условием выполнения операции является однотипность (одинаковая структура) исходных файлов.

В файл результата заносятся записи первого ИФ, которых нет во втором.

Пример. В условиях предыдущего примера выполним операцию

 

 

Получим данные об учебных дисциплинах, читаемых кафедрой № 1 без участия кафедры № 2.

 

Пересечение.Формальная запись:

 

ФР = ИФ1 ИФ2.

Условием выполнения операции является однотипность (одинаковая структура) исходных файлов.

В РФ заносятся записи, присутствующие в обоих ИФ.

Пример. Для уже известных файлов УЧ_Д_КАФЕДРЫ1 и УЧ_Д_КАФЕДРЫ2 выполним операцию пересечения

 

 

Получим данные о совместно читаемых обеими кафедрами дисциплинах:

 

Деление.Формальная запись:

 

 

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

В ФР, состоящий из полей первого ИФ, не входящих во второй, заносятся те записи, которые согласуются со всеми записями второго ИФ.

Пример. Пусть в БД хранятся два файла, содержащие данные об учебной литературе, выпущенной некоторой кафедрой.

 

 

После выполнения операции деления первого файла на второй (а она возможна, так как в файле «АВТОРЫ» имеются все поля файла ИЗДАНИЯ) получим данные об авторах (соавторах), которые приняли участие в написании всех книг, информация о которых хранится во втором файле:

 

Умножение.Формальная запись:

 

 

Условием выполнения операции умножения является отсутствие в исходных файлах полей с одинаковыми именами.

В ФР, содержащий поля обоих ИФ, заносятся все возможные комбинации записей ИФ1 и ИФ2.

Пример. Пусть в БД хранятся данные об инженерах и старших инженерах (в файлах «СТАРШИЕ_ИНЖЕНЕРЫ» и «ИНЖЕНЕРЫ» соответственно).

 

 

Требуется получить данные о возможных вариантах комплектования дежурных смен управления предприятием в составе одного старшего инженера и одного инженера.

Поскольку имена полей в ИФ1 и ИФ2 совпадают, необходимо в одном из них (например, в ИФ2) поля переименовать (например, вместо «ДОЛЖНОСТЬ» - «ДОЛЖНОСТЬ1»; вместо «ФАМИЛИЯ» - «ФАМИЛИЯ1»). Тогда после выполнения операции

 

 

получим:

 

 

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