Язык, основанный на реляционной алгебре

Языки реляционных БД

Запрос 4

Какие поставщики и по какому тарифу поставляют изделие И2?

Известное данное (номер изделия П2) находится в таблице ПОСТАВКИ, а искомые данные (имя поставщика и тариф) - в таблицах ПОСТАВЩИК и ДОСТАВКА. Поэтому для выработки ответа на запрос необходимо связать данные из трех таблиц.

Из отношения ПОСТАВКИ по номеру поставщика с помощью операции сцепления отношения с одноэлементным множеством {И2} выделим кортежи, содержащие номера поставщиков, поставляющих изделие И2. Затем выполним сцепление полученного отношения с отношением ПОСТАВЩИК по атрибуту П#. Получим отношение, содержащее атрибут с названиями городов, из которых доставляются изделия И2. Операция сцепления полученного отношения с отношением ДОСТАВКА по атрибуту Город сформирует отношение, содержащее атрибуты с искомыми данными. Наконец, выполнив проекцию этого отношения на атрибуты Имя поставщика и Тариф, выделим искомые данные.

Запишем формулу запроса.

1 2 3 4

ПОСТАВКИ * {И2} * ПОСТАВЩИК * ДОСТАВКА [Имя поставщика, Тариф]

Определим результаты выполнения каждой операции (все операции в формуле и получаемые результаты пронумерованы).

1. 2.

П1 И2     П1 И2   Восход Тула
П2 И2   П2 И2   Заря Самара

3. 4.

П1 И2   Восход Тула     Восход  
П2 И2   Заря Самара   Заря  

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

Рассмотрим другой вариант формулы запроса. Для уменьшения объемов промежуточных таблиц используем дополнительные операции проекции. Это позволит на каждом этапе отсекать ненужные столбцы и оставлять лишь те столбцы, которые необходимы для выполнения последующей операции сцепления или для вывода искомых данных.

1 2 3 4 5 6

ПОСТАВКИ * {И2} [П#] * ПОСТАВЩИК [Имя поставщика, Город] * ДОСТАВКА [Имя поставщика, Тариф]

Результаты выполнения операций.

1. 2. 3. 4.

П1 И2     П1   П1 Восход Тула   Восход Тула
П2 И2   П2 П2 Заря Самара Заря Самара

5. 6.

Восход Тула     Восход  
Заря Самара   Заря  

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

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

Рассмотрим операторы языка, выполняющие эти операции.

SELECT - оператор выборки, выполняет операцию сцепления отношения с множеством. Конструкция предложения SELECT такова:

SELECT (выбрать) <имя таблицы> WHERE (где) <условие> GIVING TEMP

(сформировать таблицу, содержащую результат).

JOIN - оператор соединения отношений, выполняет операцию сцепления двух отношений. Конструкция предложения JOIN:

JOIN (соединить) <Имя таблицы> AND (и) <имя таблицы> OVER (по) <имя

атрибута, по которому выполняется сцепление> GIVING TEMP (сформировать

таблицу, содержащую результат).

PROJECT - оператор проекции, выполняет операцию проекции отношения на его компоненты. Конструкция предложения PROJECT:

PROJECT (спроектировать) <имя таблицы> OVER (на) <имена атрибутов>

GIVING TEMP (сформировать таблицу, содержащую результат).

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

Составленные ранее запросы запишем с помощью этих операторов. Предложения запросов следуют в том же порядке, в котором следуют операции в записанных ранее формулах.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: