Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


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



Операции реляционной алгебры лежат в основе языка манипу­лирования данными СУБД, основанных на реляционных БД. Эти операции выполняются над файлами, результатом их выполне­ния также является файл, который в общем случае может ока­заться пустым [17]. При описании операций реляционной алгебры будем использовать следующие обозначения: имя исходного (пер­вого исходного; второго исходного) файла — ИФ (ИФ1; ИФ2); имя файла результата — ФР.

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

Проектирование. Названия всех операций реляционной алгеб­ры принято выделять либо курсивом (полужирным курсивом), либо

190


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

ФР - pro/ [список имен полей] (ИФ).

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

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; Просмотров: 433; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.043 с.)
Главная | Случайная страница | Обратная связь