Операции, выполняемые над отношениями, можно разделить на две группы. Первую группу составляют операции над множествами, к которым относятся операции: объединения, пересечения, разности, деления и декартова произведения. Вторую группу составляют специальные операции над отношениями, к которым относятся операции: проекции, соединения, выбора.
В реляционных СУБД для выполнения операций над отношениями используются две группы языков, имеющие в качестве своей математической основы теоретические языки запросов:
· реляционная алгебра;
· реляционное исчисление.
В реляционной алгебре операнды и результаты всех действий являются отношениями. Языки реляционной алгебры являются процедурными, так как отношение, являющееся результатом запроса к реляционной БД, вычисляются при выполнении последовательности реляционных операторов, применяемых к отношениям.
Языки исчислений являются непроцедурными и позволяют выражать запросы с помощью предиката первого порядка, которому должны удовлетворять кортежи или домены отношений.
Для примера языков реляционной алгебры и исчислений воспользуемся БД, состоящей из трех таблиц:
· S (поставщики);
· P (детали);
· SP (поставки).
S
П# |
Имя |
Статус |
Город_П |
S1 |
Сергей |
20 |
Москва |
S2 |
Иван |
10 |
Киев |
S3 |
Борис |
30 |
Киев |
S4 |
Николай |
20 |
Москва |
S5 |
Андрей |
30 |
Минск |
P
Д# |
Название |
Тип |
Вес |
Город_Д |
Р1 |
гайка |
каленый |
12 |
Москва |
Р2 |
болт |
мягкий |
17 |
Киев |
Р3 |
винт |
твердый |
17 |
Ростов |
Р4 |
винт |
каленый |
14 |
Москва |
Р5 |
палец |
твердый |
12 |
Киев |
Р6 |
шпилька |
каленый |
19 |
Москва |
SP
П# |
Д# |
Количество |
S1 |
Р1 |
300 |
S1 |
Р2 |
200 |
S1 |
Р3 |
400 |
S1 |
Р4 |
200 |
S1 |
Р5 |
100 |
S1 |
Р6 |
100 |
S2 |
Р1 |
300 |
S2 |
Р2 |
400 |
S3 |
Р2 |
200 |
S4 |
Р2 |
200 |
S4 |
Р4 |
300 |
S4 |
Р5 |
400 |
Первичными ключами этих таблиц являются соответственно: П# (код поставщика), Д# (код детали) и составной ключ (П#, Д#). Каждое из полей П#, Д# таблицы SP в отдельности является внешним ключом по отношению к таблице S и Р соответственно.
Имена доменов (множество допустимых значений) совпадают с именами атрибутов. исключение составляют атрибуты Город_П и Город_Д, которые имеют общий домен: множество названий городов. Имя этого домена может быть, например, просто Город. характеристики как типов данных следующие: Д# - строка символов длиной 5, Имя – строка символов длиной 20, Статус – цифровое длиной 5, Город – строка символов длиной 15, Д# - строка символов длиной 6, Тип – строка символов длиной 6, Вес – цифровое длиной 5, Количество – цифровое длиной 5.
Реляционная алгебра как теоретический язык запросов по сравнению с реляционным исчислением более наглядно описывает выполняемые над отношениями действий.
Примером языка запросов, основанного на реляционной алгебре, является ISBL (Information System Base Language – базовый язык информационных систем).
Реляционная алгебра, включает в себя следующие основные операции: объединение, разность, пересечение, декартово (прямое) произведение, выборка, проекция, деление, соединение.
Рис. 3.1. Основные операции реляционной алгебры
Операции реляционной алгебры можно разделить на две группы: базовые теоретико-множественные и специальные реляционные. Первая группа включает классические операции теории множеств: объединение, разность, пересечение и произведение. Вторая группа представляет собой развитие обычных теоретико-множественных операций в направлении к реальным задачам манипулирования данными, в ее состав входят операции: проекция, деление, селекция, соединение.
Операции реляционной алгебры могут выполняться над одним отношением или над двумя отношениями. В первом случае операция называется унарной, а во втором - бинарной. При выполнении бинарной операции участвующие отношения должны быть совместимы по структуре.
Совместимость структур отношений означает совместимость имен атрибутов и типов соответствующих доменов.
Основные правила записи выражений. Результатом реляционной операции является отношение, которое может участвовать в другой реляционной операции. Это свойство реляционной алгебры называется свойством замкнутости.
Свойство замкнутости позволяет записывать вложенные выражения реляционной алгебры, основой которых выступают элементные операции: объединение, проекция, пересечение, выборка и т.д.
При записи произвольного выражения реляционной алгебры надо принимать во внимание следующее.
1. В реляционной алгебре должен быть определен приоритет выполнения операций, который нужно учитывать при записи выражения. Для изменения порядка выполнения операций в выражениях можно использовать круглые скобки.
2. Существуют тождественные преобразования, позволяющие по-разному записывать одно и тоже выражение.
3. Составляя выражение, нужно обеспечивать совместимость участвующих в операциях отношений. При необходимости изменения заголовков следует выполнять переименование атрибутов.
Операндами логического выражения являются условные выражения вида a > b, Город = «Москва». Значением условного выражения может быть либо 1, либо 0.
Как отмечалось ранее, принципиальное различие между реляционной алгеброй и реляционным исчислением состоит в том, что в первом случае процесс получения искомого результата описывается явным образом путем указания набора операций, которые надо выполнить для получения результата, а во втором — указываются свойства искомого отношения без конкретизации процедуры его получения.
Внешне подходы сильно различаются: один из них предписывающий (реляционная алгебра), а другой описательный (реляционное исчисление). На более низком уровне рассмотрения подходы эквивалентны, так как любые выражения реляционной алгебры могут быть преобразованы в семантически эквивалентные выражения реляционного исчисления и наоборот. Для такого преобразования можно использовать алгоритм редукции Кодда.
Для названного алгоритма преобразования покажем на содержательном уровне возможности формулировки одного и того же запроса с помощью реляционной алгебры и реляционного исчисления на простом примере.
Пусть запрос выглядит следующим образом: «Получить номера и города поставщиков, выпускающих деталь Р2».
Словесно алгебраическая версия этого запроса описывается так:
· образовать естественное соединение отношений S и SP по атрибуту П#;
· выбрать из результата этого соединения кортежи с деталью Р2 (в поле Д# должна быть строка Р2);
· спроецировать результат предыдущей операции на атрибуты П# и Город_П.
Этот же запрос в терминах реляционного исчисления можно сформулировать примерно так: «Получить атрибуты П# и Город_П для таких поставщиков, для которых существует поставка в отношении SP с тем же значением атрибута П# и со значением Р" атрибута Д#».
Результатом выполнения запроса будет отношение R вида:
П# |
Город_П |
S1 |
Москва |
S2 |
Киев |
S3 |
Киев |
S4 |
Москва |
Преимуществом реляционного исчисления перед реляционной алгеброй можно считать то, что пользователю не требуется самому строить алгоритм выполнения запроса. Программа СУБД (при достаточной ее интеллектуальности) сама строит эффективный алгоритм.
Отметим, что поставленную задачу выборки можно решить более оптимально с точки зрения потребности в оперативной памяти. Более экономичный вариант решения в терминах операциях реляционной алгебры выглядит так:
· выбрать из отношения SP кортежи, относящиеся к детали Р2;
· выполнить естественное соединение отношения S и отношения, полученного на предыдущем шаге;
· спроецировать текущее отношение на атрибуты П# и Город_П.
Экономия памяти при реализации этого алгоритма в сравнении с первоначальным вариантом достигается за счет снижения размерности участвующих в операциях временных таблиц, необходимых для хранения промежуточных результатов. Если в предыдущем случае размерность временной таблицы была 12*6 (12 строк на 6 колонок), то в последнем случае — 4*6.
Математической основой реляционного исчисления является исчисление предикатов — один из разделов математической логики.
Существует два варианта исчислений: исчисление кортежей и исчисление доменов. В первом случае для описания отношений используются переменные, допустимыми значениями которых являются кортежи отношения, а во втором случае — элементы домена.
Реляционное исчисление, основанное на кортежах (исчисление кортежей).
Хранимые в базе данные можно обрабатывать в ручную, последовательно просматривая и редактируя данные в таблицах с помощью имеющихся в СУБД собственных средств. Для повышения эффективности применяют запросы, позволяющие производить множественную обработку данных, то есть одновременно вводить, редактировать и удалять множество записей, а также выбирать данные из таблиц.
Запрос представляет собой специальным образом описанное требование, определяющее состав производимых над БД операций по выборке, удалению или модификации хранимых данных.
Для подготовки запросов с помощью различных СУБД чаще всего используются два основных языка описания запросов:
· язык QBE (Query By Example) – язык запросов по образцу;
· SQL (Structured Query Language) – язык запросов по образцу.
По возможностям манипулирования данными при описании запросов указанные языки практически эквивалентны. Главное отличие между ними заключается в способе формирования запросов: язык QBE предполагает ручное или визуальное формирование запросов, в то время как использование SQL означает программирование запросов.
Характеристика языка QBE
Основой языка QBE является реляционное исчисление с переменными доменами. Язык QBE позволяет задавать сложные запросы к БД путем заполнения предлагаемой СУБД запросной формы. Такой способ задания запросов обеспечивает высокую наглядность и не требует указания алгоритма выполнения операции – достаточно описать образец ожидаемого результата. В каждой из современных реляционных СУБД имеется свой вариант языка QBE.
На языке QBE можно задавать запросы однотабличные и многотабличные.
С помощью запросов на языке QBE можно выполнять следующие основные операции:
· выборку данных;
· вычисление над данными;
· вставку новых записей;
· удаление записей;
· модификацию данных.
Результатом выполнения запроса является новая таблица, называемая ответной, или обновленная исходная таблица.
Выборка, вставка, удаление и модификация могут производиться безусловно или в соответствии с условиями, задаваемыми с помощью логических выражений. Вычисления над данными задаются с помощью арифметических выражений и порождают в ответных таблицах новые поля, называемые вычисляемыми.
Запросная форма имеет вид таблицы, имя и назначения полей которой совпадают с именем и названиями полей соответствующей исходной таблицы. Чтобы узнать имена доступных таблиц БД, в языке QBE предусмотрен запрос на выборку имен таблиц. Названия полей исходной таблицы могут вводиться в шаблон в ручную или автоматически. Во втором случае используется запрос на выборку заголовков столбцов.
В современных СУБД многие действия по подготовке запросов с помощью языка QBE выполняются визуально с помощью мыши, то есть «протаскиванием» мышью поля одной таблицы к полю другой.
Для иллюстрации средств и возможностей языка QBE используем таблицы БД, которая относится к торговой сфере. БД включает четыре таблицы:
СЛУЖАЩИЕ |
ФИО |
ЗАРПЛАТА |
РУКОВОДИТЕЛЬ |
ОТДЕЛ |
|
Киселев В.М. |
1800 |
Белкин Б.Н. |
хозтовары |
|
Гурский С.И. |
1600 |
Томилов А.Н. |
игрушки |
|
Андреева Е.А |
2000 |
Петров А.С. |
косметика |
|
Левин П.Г. |
2200 |
Петров А.С. |
канцтовары |
|
Носов А.П. |
1600 |
Томилов А.Н. |
игрушки |
|
Гофман В.Э. |
2600 |
Андреева Е.А |
косметика |
|
Сорокина Т.В. |
1700 |
Андреева Е.А |
косметика |
|
Белкин Б.Н. |
1800 |
Петров А.С. |
хозтовары |
|
Семин С.В. |
2200 |
Левин П.Г. |
канцтовары |
|
Григорьев А.Н. |
1900 |
Томилов А.Н. |
игрушки |
|
Томилов А.Н. |
2000 |
Петров А.С. |
игрушки |
ПРОДАЖИ |
ОТДЕЛ |
ТОВАР |
|
ПОСТАВЩИКИ |
ТОВАР |
ПОСТАВЩИК |
|
канцтовары |
бумага |
|
ручка |
Pencraft |
|
|
хозтовары |
мыло |
|
бумага |
Pencraft |
|
|
канцтовары |
карандаш |
|
мыло |
Procter & Gamble |
|
|
косметика |
помада |
|
карандаш |
Flic |
|
|
игрушки |
самолет |
|
чернила |
Pencraft |
|
|
игрушки |
машина |
|
духи |
Beautex |
|
|
игрушки |
кукла |
|
чернила |
Flic |
|
|
косметика |
духи |
|
посуда |
Cremco |
|
|
канцтовары |
чернила |
|
помада |
Beautex |
|
|
хозтовары |
посуда |
|
самолет |
Signal |
|
|
канцтовары |
ручка |
|
машина |
Signal |
|
|
|
кукла |
Signal |
|||
|
посуда |
Flic |
||||
|
ручка |
Beautex |
||||
|
карандаш |
Pencraft |
ТИПЫ ТОВАРОВ |
ТОВАР |
ЦВЕТ |
СТОИМОСТЬ |
|
посуда |
белый |
30 |
|
помада |
красный |
17 |
|
духи |
|
42 |
|
ручка |
зеленый |
6 |
|
карандаш |
синий |
2 |
|
чернила |
зеленый |
4 |
|
чернила |
синий |
3 |
|
карандаш |
красный |
2 |
|
карандаш |
синий |
2 |
Пример 1. Запрос на выборку.
Запрос на выборку всех зеленых товаров можно записать в следующем виде:
ТИПЫ ТОВАРОВ |
ТОВАР |
ЦВЕТ |
СТОИМОСТЬ |
|
Р. ХХ |
зеленый |
|
Словесно запрос можно сформулировать так: «Вывести все товары ХХ, цвет которых зеленый». В приведенном шаблоне элемент примера ХХ не обязателен, его можно опустить. Пустые колонки из шаблона можно удалять.
Выборка данных
Простая выборка. Примером простой выборки является запрос: «Вывести все возможные цвета товаров из таблицы ТИПЫ ТОВАРОВ».
Простая выборка с упорядочиванием. Для упорядочивания выводимых значений по возрастанию или по убыванию используются конструкции «АО.» и «DO.» соответственно. Если требуется упорядочить по нескольким столбцам, применяют конструкцию «АО(1)» и «АO(2)».
Выборка с квалификаторами (условиями). Выбор записей из исходной таблицы в общем случае может быть основан на точном совпадении, частичном совпадении, сравнении.
1. Точное совпадение задается вводом констант в соответствующих полях шаблона.
2. Частичное совпадение задается с помощью элементов примера.
3. Условие сравнения записывается с помощью операций сравнения: = (равно); > (больше); < (меньше); <> (не равно); >= (больше или равно); <= (меньше или равно).
Пример 2. Условия сравнения.
Запрос имени сотрудников, работающих в отделе игрушек и получающих зарплату больше 1800, выглядит так:
СЛУЖАЩИЕ |
ФИО |
ЗАРПЛАТА |
РУКОВОДИТЕЛЬ |
ОТДЕЛ |
|
Р. |
>1800 |
|
игрушки |
Результатом является таблица вида:
СЛУЖАЩИЕ |
ФИО |
|
Григорьева А.Н. |
|
Томилов А.Н. |
Пример 3. Сравнения с элементами примера.
Запрос вида: «Найти сотрудников, получающих зарплату больше чем Х».
Операнды логического выражения соединяются знаками логических операций:
· AND – конъюнкция (И);
· OR – дизъюнкция (ИЛИ);
· NOT – отрицание (НЕ);
· XOR – дизъюнкция II (исключающее ИЛИ);
· EQV – эквивалентность;
· IMP – импликация.
Приоритет выполнения операций:
· отрицание;
· конъюнкция;
· дизъюнкция.
В СУБД можно также осуществлять запросы с объединением условий, в таблицах, в которых существуют связи, проводить группировки запросов. Также можно осуществлять операции вставки, удаления, модификации записей.
Вернутся в содержание.
Скачано с www.znanio.ru
© ООО «Знанио»
С вами с 2009 года.