Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Операции реляционной алгебры
Операции реляционной алгебры лежат в основе языка манипулирования данными СУБД, основанных на реляционных БД. Эти операции выполняются над файлами, результатом их выполнения также является файл, который в общем случае может оказаться пустым [17]. При описании операций реляционной алгебры будем использовать следующие обозначения: имя исходного (первого исходного; второго исходного) файла — ИФ (ИФ1; ИФ2); имя файла результата — ФР. Некоторые операции накладывают на исходные файлы ограничения, которые в определенном смысле можно рассматривать как внутренние ограничения целостности. Проектирование. Названия всех операций реляционной алгебры принято выделять либо курсивом (полужирным курсивом), либо 190 подчеркиванием. Формальная запись проектирования выглядит следующим образом: ФР - pro/ [список имен полей] (ИФ). Операция не накладывает ограничений на исходный файл и предусматривает следУ1ощие действия: 1) из ИФ исключаются все поля, имена которых отсутствуют в 2) из полученного файла удаляются повторяющиеся записи.
Кадры | ||||||
НОМЕР | должность | ФАМИЛИЯ | ПОЧТОВЫЙ_ЯЩИК | |||
01 | Инженер | Петров | 34170 | |||
02 | Инженер | Горин | 11280 | |||
03 | Старший инженер | Сидоров | 34170 | |||
04 | Начальник цеха | Фомин | 27220 | |||
05 | Начальник цеха | Николаев | 11280 |
Требуется выполнить операцию
ФР =proj [ПоЧТОВЫЙ_ЯЩИК] (КАДРЫ).
Тогда после выполнения операции получим результат
ФР |
ПОЧТОВЫЙ_ЯЩИК |
34 170 |
11280 |
27220 |
Заметим, что с помощью приведенной операции можно выявить, в каких почтовых ящиках работают сотрудники, информация о которых содержится в данном файле.
Селекция (выбор). Формальная запись селекции выглядит следующим образом:
фР = sel [условие] (ИФ).
Эта операция также Не накладывает ограничений на ИФ. В ФР заносятся те записи из ИФ, которые удовлетворяют условию поиска. Условие представляет собой логическое выражение, связывающее значения полей ИФ.
191
Пример. Пусть для приведенного ИФ (КАДРЫ) требуется выявить сотрудников почтового ящика 34170, имеющих должность «старший инженер». Для отработки такого запроса достаточно выполнить операцию
ФР = set [ДОЛЖНОСТЬ = = «старший инженер» И ПОЧТОВЫЙ_ЯЩИК = «34 170»] (КАДРЫ).
ФР
НОМЕР | должность | ФАМИЛИЯ | почтовый_ящик |
03 | Старший инженер | Сидоров | 34170 |
Отметим, что данная операция не изменяет структуру ИФ. Кроме того, при такой формальной записи операции предполагается, что СУБД поддерживает отработку сложных (составных) запросов. В противном случае пришлось бы составное условие поиска отрабатывать последовательно: сначала выявить сотрудников, имеющих должность «старший инженер», а затем из них выделить тех, кто работает в почтовом ящике 34 170 (или наоборот). Иногда такой (последовательный) порядок поиска имеет определенные преимущества, прежде всего в тех случаях, когда на сложный запрос дан отрицательный ответ и непонятно, что послужило причиной этого (в данном примере — или нет сотрудников в должности «старший инженер», или никто из них не работает в указанном почтовом ящике, или такой почтовый ящик вообще в БД отсутствует).
Соединение. Формальная запись выглядит следующим образом:
ФР = ИФ1 ► 4 43 ИФ2. (список полей)
В реляционной алгебре определено несколько операций соединения. Рассмотрим так называемые естественное соединение. Условием выполнения данной операции является наличие в соединяемых файлах одного или нескольких однотипных полей, по которым и осуществляется соединение (эти поля указываются в списке; если список пуст, соединение осуществляется по всем однотипным полям).
В файл результата заносятся записи, являющиеся конкатена-циями (от англ. concatenate — сцеплять, связывать) записей исходных файлов. Иными словами, в ФР попадают записи ИФ1 и ИФ2 с совпадающими значениями полей, по которым осуществляется соединение («сцепка»).
Пример. Пусть помимо файла «КАДРЫ» имеется файл «ЦЕХ», в котором указаны «НОМЕР» сотрудника (как и в первом файле) и «НОМЕР ЦЕХА» (в котором данный сотрудник работает).
192
ЦЕХ |
Тогда после выполнения операции
ФР = СОТРУДНИКИ ► < НОМЕР_ЦЕХА
получим
ФР
НОМЕР | ДОЛЖНОСТЬ | ФАМИЛИЯ | ПОЧТОВЫЙ ЯЩИК | НОМЕР_ЦЕХА |
01 | Инженер | Петров | 34170 | Ш |
02 | Инженер | Горин | 11280 | Ц2 |
03 | Старший инженер | Сидоров | 34170 | Ц1 |
04 | Начальник цеха | Фомин | 27 220 | Ц2 |
05 | Начальник цеха | Николаев | 11280 | Ш |
Следует обратить внимание, что в формате команды не указаны поля соединения. Следовательно, оно осуществляется по единственному однотипному полю («НОМЕР»).
Пример. Пусть требуется выяснить, в каком цехе почтового ящика 34 170 работает старший инженер Сидоров. Для этого требуется выполнить операции:
ФР1 = sel [ДОЛЖНОСТЬ = «старший инженер» И ПОЧТОВЫЙ_ЯЩИК =
= «34170» И ФАМИЛИЯ = «Сидоров»] (КАДРЫ);
ФР2 = ФР1 ► < НОМЕР_ЦЕХА;
ФР = proj [ДОЛЖНОСТЬ, ФАМИЛИЯ, ПОЧТОВЫЙ^ЯЩИК, НОМЕР_ЦЕХА] (КАДРЫ).
В результате получим:
ФР
ДОЛЖНОСТЬ | ФАМИЛИЯ | ПОЧТОВЫЙ_ЯЩИК | HOMEPJIEXA |
Старший инженер | Сидоров | 34170 | Ц1 |
193
Объединение. Формальная запись выглядит следующим образом:
ФР = ИФ1 иИФ2.
Условием выполнения операции является однотипность (одинаковая структура) ИФ. В ФР заносятся неповторяющиеся записи ИФ.
Пример. Пусть в БД имеются два файла: «УЧ^Ц_КАФЕДРЫ_1» и «УЧ_Д_КАФЕДРЫ_2», в которых содержатся данные о читаемых кафедрами 1 и 2 учебных дисциплинах:
УЧ_Д_КАФЕДРЫ_1
НОМЕР„ДИСЦИПЛИНЫ | УЧЕБНОЕ__ОТДЕЛЕНИЕ |
2011-12 | 99/ЭВ.З-02 |
5300-43 | 96/ЭИ.6-01 |
5140-11 | 98/ЭВ.4-03 |
УЧ_Д_КАФЕДРЫ_2
НОМЕР^ИСЦИПЛИНЫ | УЧЕБНОЕ__ОТДЕЛЕНИЕ |
5110-15 | 97/ЭИ.5-02 |
5413-23 | 98/ЭВ.4-01 |
2010-19 | 01/ЭИ.1-03 |
5300-43 | 96/ЭИ.6-01 |
Тогда после выполнения операции объединения
ФР = УЧЛ_КАФЕДРЫ_1 и УЧ_Д_КАФЕДРЫ_2.
получим данные об учебных дисциплинах, читаемых обеими кафедрами:
ФР
НОМЕРЛИСЦИПЛИНЫ | УЧЕБНОЕ_ОТДЕЛЕНИЕ |
5110-15 | 97/ЭИ.5-02 |
5413-23 | 98/ЭВ.4-01 |
2010-19 | 01/ЭИ.1-03 |
5300-43 | 96/ЭИ.6-01 |
2011-12 | 99/ЭВ.З-02 |
5140-11 | 98/ЭВ.4-03 |
194
Напомним, что последовательность записей в файлах БД роли не играет.
Разность (вычитание). Формальная запись разности выглядит следующим образом:
ФР = ИФ1 - ИФ2.
Условием выполнения операции является однотипность (одинаковая структура) ИФ. В ФР заносятся записи первого ИФ, которые отсутствуют во втором.
Пример. При тех же условиях выполним операцию
ФР = УЧЛ_КАФЕДРЫ_1 - УЧ_Д_КАФЕДРЫ_2.
Получим данные об учебных дисциплинах, читаемых только кафедрой 1.
ФР
НОМЕР_ДИСЦИПЛИНЫ | УЧЕБНОЕ_ОТДЕЛЕНИЕ |
2011-12 | 99/ЭВ.З-02 |
5140-11 | 98/ЭВ.4-03 |
Пересечение. Формальная запись выглядит следующим образом:
ФР = ИФ1 о ИФ2.
Условием выполнения операции является однотипность (одинаковая структура) ИФ. В ФР заносятся записи, присутствующие в обоих ИФ.
Пример. Для уже известных файлов УЧЛ_КАФЕДРЫ_1 и УЧ_Д_КА-ФЕДРЫ2 выполним операцию пересечения
ФР = УЧЛ_КАФЕДРЫ_1 п УЧЛ_КАФЕДРЫ_2.
Получим данные о совместно читаемых обеими кафедрами дисциплинах:
ФР
номерлисциплины | УЧЕБНОЕ_ОТДЕЛЕНИЕ |
5300-43 | 96/ЭИ.6-01 |
Деление. Формальная запись деления выглядит следующим образом:
ФР = ИФ1-ИФ2.
195
Чтобы можно было выполнить операцию деления, необходимо, чтобы в первом ИФ было больше полей, чем во втором, и для каждого поля второго ИФ существовало однотипное ему поле в первом ИФ. В ФР, состоящий из полей первого ИФ, не входящих во второй, заносятся те записи, которые согласуются со всеми записями второго ИФ.
Пример. Пусть в БД хранятся два файла, содержащие данные об учебной литературе, выпущенной некоторой кафедрой:
АВТОРЫ
АВТОР | НАЗВАНИЕ | ГОД_ИЗДАНИЯ |
Иванов | Теория вероятностей | 1997 |
Петров | Методы оптимизации | 1998 |
Петров | Теория вероятностей | 1997 |
Иванов | Методы оптимизации | 1998 |
Сидоров | Методы оптимизации | 1998 |
Петров | Концепции естествознания | 1996 |
Сидоров | Исследование операций | 1999 ' |
ИЗДАНИЯ
НАЗВАНИЕ | ГОД_ИЗДАНИЯ |
Теория вероятностей | 1997 |
Методы оптимизации | 1998 |
После выполнения операции деления первого файла на второй (а она возможна, так как в файле «АВТОРЫ» имеются все поля файла «ИЗДАНИЯ») получим данные об авторах (соавторах), которые приняли участие в написании всех книг, информация о которых хранится во втором файле:
ФР |
АВТОР |
Иванов |
Петров |
Умножение. Формальная запись выглядит следующим образом: ФР = ИФ1хИФ2.
196
Условием выполнения операции умножения является отсутствие в ИФ полей с одинаковыми именами. В ФР, содержащий поля обоих ИФ, заносятся все возможные комбинации записей ИФ1 и ИФ2.
Пример. Пусть в БД хранятся данные о старших инженерах и инженерах (в файлах «СТАРШИЕ_ИНЖЕНЕРЫ» и «ИНЖЕНЕРЫ», соответственно).
СТАРШИЕ ИНЖЕНЕРЫ
должность | ФАМИЛИЯ |
Старший инженер Ц1 | Иванов |
Старший инженер Ц1 | Петров |
ИНЖЕНЕРЫ
ДОЛЖНОСТЬ | ФАМИЛИЯ |
Инженер Ц1 | Сидоров |
Инженер Ц2 | Леонидов |
Инженер ЦЗ | Дмитриев |
Требуется получить данные о возможных вариантах комплектования дежурных смен управления предприятием в составе двух сотрудников: старшего инженера и инженера.
Поскольку имена полей в ИФ1 и ИФ2 совпадают, необходимо в одном из них (например, в ИФ2) переименовать поля (например, вместо «ДОЛЖНОСТЬ» - «ДОЛЖНОСТЫ»; вместо «ФАМИЛИЯ» - «ФАМИЛИЯ!»). По сути, переименование полей — это еще одна операция реляционной алгебры, носящая вспомогательный характер. Тогда после выполнения операции
ФР = СТАРШИЕ_ИНЖЕНЕРЫх ИНЖЕНЕРЫ
получим:
ФР
ДОЛЖНОСТЬ | ФАМИЛИЯ | ДОЛЖНОСТЫ | ФАМИЛИЯ 1 |
старший инженер Щ | Иванов | инженер Ц1 | Сидоров |
старший инженер Ц1 | Иванов | инженер Ц2 | Леонидов |
старший инженер Ц1 | Иванов | инженер ЦЗ | Дмитриев |
старший инженер Ц2 | Петров | инженер Ц1 | Сидоров |
старший инженер Ц2 | Петров | инженер Ц2 | Леонидов |
старший инженер Ц2 | Петров | инженер ЦЗ | Дмитриев |
197
С помощью восьми операций реляционной алгебры можно найти ответ на любой запрос к БД, если, конечно, интересующие пользователя данные в ней хранятся. Типовые запросы могут быть запрограммированы заранее и отрабатываться как процедуры (транзакции). Обработка уникальных (нетиповых) запросов должна предусматривать оперативную разработку последовательности необходимых операций и ее последующую реализацию, для чего необходимо иметь специально подготовленный персонал.
Последнее изменение этой страницы: 2019-05-08; Просмотров: 471; Нарушение авторского права страницы