Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
8
Добавлен:
03.03.2016
Размер:
228.35 Кб
Скачать

1.4 Реляционные выражения

Поскольку результатом любой РО является некоторая таблица, можно со­ставлять реляционные выражения. Для этого вместо таблицы–операнда некоторой РО (кроме операции присваивания) можно использовать вложенное реляционное выражение. Например, запрос, представленный на языке РА, может быть вычислен на основе вычисления элементарных алгебраических операций с учетом их старшинства и возможного наличия скобок. Алгебраическая формули­ровка запроса носит предписывающий характер, т. е. описывает процедуру решения проблемы. Поэтому считают, что, подобно тому, как интерпретируются арифметические и логические выражения, выражение РА также имеет процедур­ную интерпретацию.

Пусть требуется представить в БД сущность Группа с основными свойст­вами (обозначение группы или ее код, специальность, год набора, староста группы и набор студентов группы). Для каждого студента нужно хранить сле­дующую информацию:

  • код студента;

  • ФИО студента;

  • стипендия.

При правильном проектировании БД в ней появятся две РТ: тГруппы и тСтуденты. Отразим в названии полей их назначение, при этом для удобства на­звания полей тГруппы будут начинаться с сочетания букв Гр, а поля тСтуденты – с букв Ст_. Таким образом структуры РТ могут иметь следующий вид:

тГруппы (*Гр_код, Гр_год,Гр_спец, Гр_староста);

тСтуденты (*Ст_код, Ст_ФИО, Ст_стип, Ст_гр_код).

Первичные ключи в РТ показаны знаком звездочки (*).

Допустим, нужно узнать коды и ФИО студентов, являющихся старостами групп, набранных в 2000 году.

Если бы для формулировки такого запроса использовать РА, то мы полу­чили бы следующее пошаговое решение в виде алгебраических выражений:

  1. выполняется соединение исходных РТ по условию (код студента должен быть равным коду старосты)

Т1:=(тСтуденты TIMES тГруппы) WHERE Ст_код = Гр_стар;

  1. полученная в п.1 РТ Т1 ограничивается по условию (по заданному году на­бора)

Т2:=Т1 WHERE Гр_год=2000;

  1. результат предыдущей операции проецируется на искомые поля

Т3:=Т2 [Ст_ФИО, Ст_код ].

Фактически сформулирована последовательность шагов выполнения за­проса, каждый из которых соответствует одной реляционной операции. Таблица Т3 содержит искомый результат.

Можно объединить все шаги в один и выразить запрос в виде одного реля­ционного выражения:

Т3:=(((тСтуденты TIMES тГруппы ) WHERE Ст_код = Гр_стар)

WHERE Гр_год=2000 ) [Ст_ФИО, Ст_код ].

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

23

Соседние файлы в папке Обработка РБД-relalg