Зачем нужна реляционная алгебра 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Зачем нужна реляционная алгебра



Восемь операторов Кодда не представляют минимального набора операторов (они задумывались не с этой целью), так как не все из них примитивны и часть из них можно определить в терминах других операторов. В действительности три операции из этого набора, а именно — соединение, пересечение и деление, можно определить через остальные пять. Пять данных операций (выборка, проекция, произведение, объединение и вычитание) можно рассматривать как примитивные в том смысле, что ни одна из них не выражается через другие. Поэтому минимальный набор (безусловно, необязательно единственно возможный) будет состоять из этих пяти примитивных операций. Однако на практике остальные три операции (в особенности операция соединения) используются настолько часто, что имеет смысл обеспечить их непосредственную поддержку, несмотря на то, что они не являются примитивными.

Основная цель алгебры — обеспечить запись реляционных выражений. Такие выражения, в свою очередь, хотя и предполагают различное применение, включая, конечно, и выборку информации, не ограничены лишь этой одной функцией. Ниже перечислены некоторые из возможных применений подобных выражений.

■ Определение области выборки, т.е. тех данных, которые должны быть доставлены в результате выполнения операции выборки (что детально рассматривалось выше).

■ Определение области обновления, т.е. данных, которые должны быть вставлены, изменены или удалены в результате выполнения операции обновления.

■ Определение правил поддержки целостности данных, т.е. некоторых особых требований, которым должна удовлетворять база данных.

■ Определение производных переменных-отношений, т.е. тех данных, которые должны быть включены в представления или "моментальные снимки" состояния базы данных.

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

■ Определение ограничений защиты, т.е. данных, для которых осуществляется тот или иной тип контроля доступа.

В целом, выражения реляционной алгебры служат для символического высокоуровневого представления намерений пользователя (например, в отношении некоторого определенного запроса). И именно потому, что подобные выражения являются символическими и высокоуровневыми, ими можно манипулировать в соответствии с различными символическими высокоуровневыми правилами преобразования. Например, рассмотрим следующее выражение ("Получить имена поставщиков детали с номером 'Р2').

((SP JOIN S) WHERE Р# = Р# ('Р2')) { SNAME }

Его можно преобразовать в логически эквивалентное, но, вероятно, более рациональное выражение следующего вида.

((SP WHERE P# = P# ('Р2')) JOIN S) { SNAME }

Таким образом, реляционная алгебра может служить хорошим основанием для выполнения оптимизации. Следовательно, если пользователь выразил свой запрос с помощью первого из двух приведенных выше выражений, то перед выполнением оптимизатор должен преобразовать его во второе выражение (в идеальном случае производительность не должна зависеть от формы, в которой пользователь выражает свой запрос).

Благодаря своей фундаментальной природе реляционная алгебра часто используется в качестве критерия возможностей выражения пользовательских намерений для некоторого определенного реляционного языка (например, такого, как язык SQL). В общем случае язык называют реляционно полным, если его возможности, по крайней мере, соответствуют возможностям, обеспечиваемым алгебраическими операциями; иначе говоря, если выражения этого языка позволяют определить каждое отношение, которое может быть определено с помощью алгебраических выражений (первоначальной алгебры).

Операция расширения

В описанной выше алгебре нет средств для скалярных вычислений. Конечно, на практике такие возможности просто необходимы. Например, может понадобиться запросить из базы данных результат вычисления некоторого арифметического выражения, подобного выражению WEIGHT*454, или сослаться на такое значение в выражении WHERE при выборке (в примере вес деталей приведен в фунтах; тогда выражение WEIGHT*454 переводит этот вес в граммы.) Для обеспечения таких возможностей и предназначена операция расширения. Точнее, с ее помощью из определенного отношения (по крайней мере, концептуально) создается новое отношение. Оно похоже на начальное, но содержит дополнительный атрибут, значения которого получены посредством некоторых скалярных вычислений. Например, можно написать следующее.

 

EXTEND P ADD { WEIGHT * 454) AS GMWT

С помощью этого выражения создается новое отношение с таким же заголовком, как и у отношения Р, за исключением дополнительного атрибута GMWT. Каждый кортеж этого отношения совпадает с соответствующим кортежем отношения Р, но содержит еще одно дополнительное значение атрибута GMWT, вычисляемое в соответствии с указанным выражением, как показано на рис. 9.

 

Рис. 11. Пример операции расширения.

 

Выражение EXTEND не изменяет содержимое базовой переменной-отношения деталей в базе данных. Это всего лишь выражение, такое же, как, например, S JOIN SP, и значит, оно создает определенный результат. В данном случае этот результат подобен текущему значению базовой переменной-отношения деталей. (Иначе говоря, операция расширения — это не реляционный аналог SQL-оператора ALTER TABLE.)

Операция обобщения

В реляционной алгебре операция расширения позволяет выполнять "горизонтальные" вычисления в отношении отдельных строк. Оператор обобщения выполняет аналогичную функцию для "вертикальных" вычислений в отношении отдельного столбца. Например, рассмотрим следующее выражение.

 

SUMMARIZE SP PER SP { P# } ADD SUM (QTY) AS TOTQTY

 

В результате его вычисления создается отношение с заголовком {Р#,TOTQTY}, содержащее один кортеж для каждого значения атрибута P# в проекции SP{P#}. Каждый из этих кортежей содержит значение атрибута P# и соответствующее общее количество деталей (Рис.11.). Другими словами, концептуально исходное отношение Р "перегруппировано" в множество групп кортежей (по одной группе для каждого уникального значения атрибута P#), после чего для каждой полученной группы сгенерирован один кортеж, помещаемый в окончательный результат.

 

Рис.12. Пример выполнения операции SUMMARIZE

 

В общем случае значение выражения

SUMMARIZE A PER В ADD <обобщение> AS Z

определяется следующим образом.

■ Отношение В должно иметь такой же тип, как и некоторая проекция отношения А, т.е. каждый атрибут отношения В должен одновременно присутствовать в отношении А. Примем, что атрибутами этой проекции (или, что эквивалентно, атрибутами отношения В) являются атрибуты А1, А2,..., An.

■ Результатом вычисления данного выражения будет отношение с заголовком {А1,А2,..., An, Z}, где Z является новым добавленным атрибутом.

■ Тело результата содержит все кортежи t, где t является кортежем отношения В, расширенным значением нового атрибута Z. Это значение нового атрибута Z подсчитывается посредством вычисления обобщающего выражения по всем кортежам отношения А, которое имеет те же значения для атрибутов А1, А2,..., An, что и кортеж t. (Разумеется, если в отношении А нет кортежей, принимающих те же значения для атрибутов А1, А2, ..., An, что и кортеж t, то обобщающее выражение будет вычислено для пустого множества.) Отношение В не должно содержать атрибут с именем Z, а обобщающее выражение не должно ссылаться на атрибут Z. Кардинальность результата равна кардинальности отношения В, а степень результата равна степени отношения В плюс единица. Типом переменной Z в этом случае будет тип обобщающего выражения.



Поделиться:


Последнее изменение этой страницы: 2017-01-27; просмотров: 246; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.173.112 (0.009 с.)