Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы баз денных.doc
Скачиваний:
106
Добавлен:
10.12.2013
Размер:
789.5 Кб
Скачать

Операции выборки в отношениях, имеющих древовидную структуру

Р

RS

ассмотрим отношение RS («структура подчинения»), показанное на рис.8.1. Это отношение имеет два атрибута: EMP и MGR. Оба они полу-

MGR

EMP

Е1

Е1

Е1

Е6

Е8

Е8

Е15

Е15

Е24

Е6

Е7

Е8

Е18

Е15

Е16

Е20

Е24

Е32

Рис.1. Отношение RS («структура подчинения»).

чаются из домена «номера служащих». Смысл любого кортежа RS состоит в том, что указанный cлужащий с номером ЕМР работает под руководством указанного начальника с номером MGR.

Мы полагаем, что структура подчинения, представленная отношением RS, всегда удовлетворяет следующим ограничениям:

1. Никакой служащий не является своим собственным начальником.

2. Никакой служащий не имеет более одного непосредственного началь­ника.

3. Если, например, ЕХ является непосредственным начальником EY, то EY не может быть начальником служащего, находящегося на уровне ЕХ.

Рис.2. Отношение RS, представленное в виде дерева.

Можно убедиться, что таб­лица на рис.1 удовлетворяет этим ог­раничениям. Поэтому мы можем пред­ставить это отношение как имеющее древовидную структуру (рис.2).

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

Рассмотрим некоторые примеры.

Выборка с уровня на один уровень ниже заданного.

Получить но­мера служащих, подчиненных служащему E8 на первом уровне.

RS

MQR

ЕМР

Е8

Р.ЕХ

Под выражением «на первом уровне» мы подразумеваем, что E8 является непосредственным начальником интересующих нас служащих. Ответом на за­прос являются служащие E15 и E16. Этот пример очевиден и не иллюстри­рует ничего нового.

Выборка с уровня на два уровня ниже заданного. Получить номера служащих, подчиненных служащему E8 на втором уровне.

RS

MGR

ЕМР

E8

EY

EY

Р.ЕХ

Опять решение очевидно, но заметим, что мы должны ввести связь EY, а так­же должны записать эту связь в таблицу дважды. В общем случае, если мы хотим спуститься по дереву вниз на п уровней, нам нужно записать каж­дую из n— 1 связей дважды (весьма утомительный процесс!).

Поэтому язык QBE обеспечивает удобное сокращение, которое иллюстри­руется альтернативной записью рассмотренного выше запроса.

RS

MGR

ЕМР

Е8

P.EX(2L)

«(2L)» обозначает «второй уровень». Вообще, здесь может стоять любое це­лое, предшествующее литере L и вместе с ней заключенное в скобки. Всякий раз, когда используется указатель уровня, QBE помещает номера относитель­ных уровней в таблицу результатов. Например:

ЕМР

E20(2L)

E24(2L;

Выборка с уровня на два уровня выше заданного. Получить номер начальника (MGR), находящегося двумя уровнями выше служащего Е20.

RS

MGR

ЕМР+

P.MX(2L)

Е20

Здесь запись уровня появляется в столбце MGR. В общем случае направле­ние поиска (вверх или вниз по дереву) указывается столбцом, в котором по­является запись уровня. В некоторых ситуациях это правило, однако, могло бы привести к неоднозначности. Чтобы избежать этого, в QBE вводится ограничение, согласно которому не более чем две записи уровня могут появ­ляться в любой строке при формировании запроса, включающего уровни.

Выборка со всех уровней ниже заданного. Получить номера служа­щих, подчиненных служащему Е8 на любом уровне.

RS

MGR

ЕМР

Е8

P.EX(6L)

Результат

ЕМР

Е15(1L)

E20(2L)

E24(2L)

E32(3L)

E16(1L)

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

Выборка с самого нижнего уровня. Получить номера служащих, подчиняющихся служащему Е8 на самом нижнем уровне.

RS

MQR

ЕМР

Е8

P.EX(MAX.6L)

МАХ представляет собой библиотечную функцию. Смысл за­проса заключается в следующем: «Получить номера тех служащих, чей отно­сительный уровень под Е8 имеет наибольшее значение». Результатом является единственный номер служащего Е 32 (3L).

Выборка с терминальных уровней. Выдать номера тех служащих, которые подчиняются служащему Е8 и сами не имеют подчиненных.

RS

MQR+

ЕМР

Е8

P.EX(LAST.L)

Мы ищем служащих на концевых вершинах дерева под Е8. Поскольку в об­щем случае эти служащие будут на различных относительных уровнях, мы не можем записать какую-либо целую константу или целую переменную (кон­станта означала бы некоторый фиксированный уровень, а переменная озна­чала бы все уровни). Поэтому язык QBE обеспечивает специальную библио­течную функцию LAST (последний).

Выборка уровня.На каком относительном уровне служащий Е20 находится ниже служащего Е1?

RS

MGR

EMP

E1

P.E20(7L)

Результат:

EMP

E20(3L)

Соседние файлы в предмете Базы данных