Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД / Uchpos / Gl_4.doc
Скачиваний:
24
Добавлен:
27.04.2015
Размер:
342.53 Кб
Скачать

4. Реляционные языки запросов

Isbl -язык реляционной алгебры

ISBL (Information System Base Language) -это язык запросов, раз­работанный в исследовательском центре фирмыIBMв Питерли (Англия) для использования в экспериментальной системе PRTV (Peterlee Relatio­nal Test Vehicle).Он весьма близок к реляционной алгебре,поэтому полнота ISBLможет быть легко доказана. Синтаксическое соответствие этого языка и реляционной алгебры показано в табл. 1.

Таблица 1

Реляционная алгебра

ISBL

Объединение

R+S

Разность

R-S

Пересечение

R. S

Селекция

R:F

Проецирование

R%A1,…,An

Естественное соединение

R* S

Rи Sмогут быть лю­быми реляционными выражениями, a F -булевской формулой.

Если множества имен атрибутов отношений-операндов не пересекаются, R*S – декартово произведение.

Чтобы напечатать значение некоторого выражения, перед ним записывается LIST.Для присваивания значения выражения отношению, имя кото­рого R,служит операторR =Е. Можно отложить связывание отношения с именами, входящими в выражение, до тех пор, пока имя этого отношения не будет использовано слева от знака присваивания. Чтобы от­ложить вычисление некоторого отношения, поместим перед его именем в вы­ражении оператор N!.

Предположим, что требуется иногда использовать компози­цию бинарных отношений R(А, В) и S(С, D).Если записать

RCS= R*S :В =С%А, D.

то будет вычислена композиция текущих значений отношений Rи Sи присвоена имени отношения RCS.Отметим, что Rи Sимеют атрибуты с различными именами. Поэтому оператор *(естественное соединение) является здесь декартовым произведением.

Допустим, что мы хотели бы обозначить через RCSне композицию теку­щих значений R(А, В) и S(С, D),а формулу композиционирования Rи S.Тогда сле­довало бы записать

RCS = N!R*N!S :В =С%А, D.

Этот оператор ISBLне вызывает вычисления отношений. Он определяетRCSкак обозначение формулы R*S :В =С%А, D.Если мы когда-либо используемRCSв операторе, который требует вычисления этого отношения, например, в операторе

LIST RCS или Т = RCS + U,

то текущие значения Rи Sдля этого момента времени подставляются в формулу RCS, и вычисляется значение RCS.

Оператор отложенного вычисления N!служит двум важным целям. Во-первых, большие реляционные выражения трудно записать корректно с первого раза. Отложенное вычисление позволяет программисту упростить конструирование выражений благодаря назначению временных имен важным их частям. Однако более существенно то, что отложенное вычисление предо­ставляет элементарную возможность для определения представлений базы данных. Бла­годаря определению имен отношений как выражений с отложенным вычис­лением программист может использовать эти имена так, как будто определя­емые отношения действительно существуют.

Определения чисто теоретико-множественных операторов - объеди­нения, пересечения и разности - модифицируются в ISBL по отношению к их стандартным определениям в реляционной алгебре с тем, чтобы удовлетворить требованию совместимости отношений по этим операциям. Оператор разности R - S является обычной теоретико-множественной разностью, если R и S имеют одно и то же мно­жество имен атрибутов. Однако в том случае, когда некоторые из атрибу­тов R и S различны, R - S обозначает множество принадлежащих R кор­тежей t, таких, что t не совпадает ни с одним кортежем в S по тем атрибутам, которые являются общими для R и S.

Для создания возможности использования нужным образом этих опера­торов предусматривается специальный вид проекции, обеспечивающий пе­реименование атрибутов. В списке атрибутов, следующих за оператором проекции (%),элемент А ->В означает, что компонент, соответствующий атрибуту Л, включается в проекцию, но переименовывается в В. Например, чтобы получить объединение R(А, В) с S(A, С), запишем

(R%A, B->C)+S.

Результирующее отношение имеет атрибуты Aи С. Мы можем также применить переименование для получения декартова произведения отношений, множества атрибутов которых пересекаются. За­метим, что естественное соединение R (A, B)*S(С, D)является в действи­тельности декартовым произведением, а R(A, B)*S(В, С)-естествен­ным соединением, в которомB-компоненты Rи Sравны. Если требуется получить декартово произведение R(А, В) и S(В, С), мы можем записать

(R%А, В -> D)*S.

Так как левый операнд оператора *имеет атрибутыAи D, a S -атри­буты В и С, результат является декартовым произведением.

Благодаря переименованию атрибутов существует возможность моде­лирования любой из пяти основных операций реляционной алгебры в ISBL. Таким образом, очевидно, что ISBLявляется полным языком.

Для примеров запросов на ISBLиспользуем базу данных, содержащую следующие отношения:

S(S#,Sname,Status, City) – Поставщики с атрибутами Номер поставщика, Имя, Статус и Адрес;

P(P#,Pname,Color,Weight,City) – Деталь с атрибутами Номер детали, Наименование, Цвет, Вес, Место хранения;

SP(S#,P#,QTY) – Поставки с атрибутами Номер поставщика, Номер детали и Количество.

  1. Определить номера поставщиков, поставляющих деталь с номером Р2:

LIST SP:P# = ’P2’ % S#

  1. Определить номера поставщиков, поставляющих по крайней мере одну деталь красного цвета:

LIST P:Color = ‘Красный’ * SP % S#

  1. Определить города, из которых поставлялись детали поставщиком с именем База1:

LIST S:Sname = ‘База1’ * SP % P# * P % City

Проецирование на P# в данном случае обязательно потому, что в отношенияхSиPимеется одноименный атрибутCity.Это используется в следующем запросе.

  1. Определить имена поставщиков, поставляющих детали, хранящиеся в их городе:

LIST S * SP * P % Sname

  1. Определить номера и названия деталей весом более 5 кг, поставляемых поставщиком с именем База1:

LIST S:Sname = ‘База1’ * SP % P# * P:Weight > 5 % P#,Pname

  1. Определить номера поставщиков,поставляющих все детали:

P1 = N! P % P# - множество номеров деталей;

S1 = N! S % S# - множество номеров поставщиков;

SP1 = N! SP % S#,P# - множество пар поставщик – поставляемая деталь;

A = N! S1 * N! P1 – N! SP1 - множество пар поставщик – деталь, не поставляемая этим поставщиком;

LIST S1 – (A % S#)

Соседние файлы в папке Uchpos