
3.5. Теоретические языки запросов
Операции, выполняемые над отношениями, можно разделить на две группы. Первую группу составляют операции над множествами, к которым относятся операции: объединения, пересечения, разности, деления и декартова произведения. Вторую группу составляют специальные операции над отношениями, к которым, в частности, относятся операции: проекции, соединения, выбора.
В различных СУБД реализована некоторая часть операций над отношениями, определяющая в какой-то мере возможности данной СУБД и сложность реализации запросов к БД.
В реляционных СУБД для выполнения операций над отношениями используются две группы языков, имеющие в качестве своей математической основы теоретические языки запросов, предложенные Э.Коддом:
реляционная алгебра;
реляционное исчисление.
Эти языки представляют минимальные возможности реальных языков манипулирования данными в соответствии с реляционной моделью и эквивалентны друг другу по своим выразительным возможностям. Существуют не очень сложные правила преобразования запросов между ними.
В реляционной алгебре операнды и результаты всех действий являются отношениями. Языки реляционной алгебры являются процедурными, так как отношение, являющееся результатом запроса к реляционной БД, вычисляется при выполнении последовательности реляционных операторов, применяемых к отношениям. Операторы состоят из операндов, в роли которых выступают отношения, и реляционных операций. Результатом реляционной операции является отношение.
Языки исчислений, в отличие от реляционной алгебры, являются непроцедурными (описательными, или декларативными) и позволяют выражать запросы с помощью предиката первого порядка (высказывания в виде функции), которому должны удовлетворять кортежи или домены отношений. Запрос к БД, выполненный с использованием подобного языка, содержит лишь информацию о желаемом результате. Для этих языков характерно наличие наборов правил для записи запросов. В частности, к языкам этой группы относится SQL.
При рассмотрении языков реляционной алгебры и исчислений будем использовать базу данных, включающую в себя следующие таблицы:
S (поставщики);
Р (детали);
SP (поставки).
Первичными ключами этих таблиц являются соответственно: П# (код поставщика), Д# (код детали) и составной ключ (П#, Д#). Содержимое таблиц приведено на рис. 3.7. Для удобства изложения предположим, что в рассматриваемых языках запросов нет ограничений на употребление символов русского алфавита в именах атрибутов. Каждое из полей П# и Д # таблицы SP в отдельности является внешним ключом по отношению к таблице S и Р соответственно.
S
П# |
Имя |
Статус |
Город_П |
S1 |
Сергей |
20 |
Москва |
S2 |
Иван |
10 |
Киев |
S3 |
Борис |
30 |
Киев |
S4 |
Николай |
20 |
Москва |
S5 |
Андрей |
30 |
Минск |
P
Д# |
Название |
Тип |
Вес |
Город_Д |
Р1 |
.гайка |
каленый |
12 |
Москва |
Р2 |
болт |
мягкий |
17 |
Киев |
РЗ |
винт |
твердый |
17 |
Ростов |
Р4 |
винт |
каленый |
14 |
Москва |
Р5 |
палец |
твердый |
12 |
Киев |
Р6 |
шпилька |
каленый |
19 |
Москва |
SP
П# |
Д# |
Количество |
S1 |
Р1 |
300 |
S1 |
Р2 |
200 |
S1 |
РЗ |
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 |
Рис. 3.7. Таблицы поставщиков, деталей и поставок
Предположим, что имена доменов (множеств допустимых значений) совпадают с именами атрибутов. Исключение составляют атрибуты Город_П (город, в котором находится поставщик) и Город_Д (город, в котором выпускается деталь), которые имеют общий домен: множество названий городов. Имя этого домена может быть, например, просто Город. Характеристики доменов как типов данных следующие: Д# — строка символов длиной 5, Имя — строка символов длиной 20, Статус — цифровое длиной 5, Город — строка символов длиной 15, Д# — строка символов длиной 6, Тип — строка символов длиной 6, Вес — цифровое длиной 5, Количество — цифровое длиной 5.