Операции реляционной алгебры лежат в основе языка манипулирования данными СУБД, основанных на РБД. Эти операции выполняются над файлами и в результатом их выполнения также является файл, который в общем случае может оказаться и пустым.
При описании операций реляционной алгебры будем использовать обозначения: ИФ (ИФ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»). Тогда после выполнения операции
получим:
С помощью приведенных выше восьми операций реляционной алгебры можно найти ответ на любой запрос к БД, если, конечно, интересующие пользователя данные в ней хранятся. Типовые запросы могут быть запрограммированы заранее и отрабатываться как процедуры (транзакции). Обработка уникальных (нетиповых) запросов должна предусматривать оперативную разработку последовательности необходимых операций и последующую ее реализацию.