Использование реляционной алгебры для составления запросов к БД




 

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

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

Запрос 1

Сообщить название фирмы-поставщика П1.

Мы получим ответ на этот запрос, если из таблицы ПОСТАВЩИК выделим строку, содержащую сведения о поставщике П1. Это можно сделать, выполнив операцию сцепления отношения ПОСТАВЩИК с известной из запроса константой П1 (т.е. выполнив операцию сцепления отношения с одноэлементным множеством {П1}).

ПОСТАВЩИК * {П1}

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

 

П1 Восход Тула

 

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

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

В результате будет выделен один столбец. Это и будет ответом на запрос.

 

Восход

 

Запрос 2

В каком количестве поставляются изделия И2?

Искомые сведения находятся в таблице ПОСТАВКИ. Аналогично Запросу 1 применим к отношению ПОСТАВКИ операцию сцепления с известной константой И2, а затем спроектируем полученное отношение на атрибут Кол.

 


 

ПОСТАВКИ * {И2} [Кол]

 

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

 

П1 П2 И2 И2 200 500

 

200 500

 

Запрос 3

Сколько изделий И2 поставляет фирма Заря?

В этом запросе известными являются значения двух атрибутов: Имя поставщика Заря и номер изделия - И2. Известные и искомые данные находятся в двух таблицах: ПОСТАВЩИК и ПОСТАВКИ, поэтому для ответа на запрос необходимо "привязать" сведения из одной таблицы к сведениям из другой таблицы. Это можно сделать, выполнив операцию сцепления отношений по атрибуту П#.

Для выработки ответа на запрос выполним следующие действия:

узнаем значение атрибута П#, выполнив операцию сцепления отношения ПОСТАВЩИК с одноэлементным множеством Заря;

выполним операцию сцепления полученного результата с отношением ПОСТАВКИ по атрибуту П#;

выполнив операцию сцепление отношения с одноэлементным множеством, выделим кортежи, содержащие сведения об изделии И2;

и, наконец, выполним проекцию на атрибут Кол.

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

 

ПОСТАВЩИК * {Заря} * ПОСТАВКИ * {И2} [Кол]

 

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

. В результате выполнения операции сцепления отношения ПОСТАВЩИК с одноэлементным множеством {Заря} получим новое отношение, содержащее единственный кортеж (т.е. новую таблицу, состоящую из одной строки).

 

П2 Заря Самара

 

. Вторая операция выполняет сцепление полученного отношения, имеющего арность 3, с отношением ПОСТАВКИ, имеющим также арность 3, по одинаковому значению атрибута П#. В результате получим новое отношение арностью 5. В него войдут все кортежи сцепляемых отношений, у которых значение атрибута П# = П2.

 

П2 Заря Самара И1  
П2 Заря Самара И2  

 

. В результате выполнения третьей операции из полученного отношения выберутся строки, в которых значение атрибута И# равно И2.

. С помощью операции проекции уточним ответ, выделив столбец Кол.

 

П2 Заря Самара И2      

 

Запрос 4

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

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

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

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

 

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

 

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

 

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

 

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

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

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

 

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

 

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

 

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

 


 

Заключение

 

Язык для взаимодействия с БД SQL появился в середине 70-х и был разработан в рамках проекта экспериментальной реляционной СУБД System R. Исходное название языка SEQUEL (Structered English Query Language) только частично отражает суть этого языка. Конечно, язык был ориентирован главным образом на удобную и понятную пользователям формулировку запросов к реляционной БД, но на самом деле уже являлся полным языком БД, содержащим помимо операторов формулирования запросов и манипулирования БД средства определения и манипулирования схемой БД; определения ограничений целостности и триггеров; представлений БД; возможности определения структур физического уровня, поддерживающих эффективное выполнение запросов; авторизации доступа к отношениям и их полям; точек сохранения транзакции и откатов. В языке отсутствовали средства синхронизации доступа к объектам БД со стороны параллельно выполняемых транзакций: с самого начала предполагалось, что необходимую синхронизацию неявно выполняет СУБД.

 


 

Список литературы

1. "SQL Полное руководство" Киев, 1998

. "Программирование в среде СУБД FoxPro 2.0" Москва, 1993

. "Эффективная работа с Microsoft Access 7.0" Питер, Санкт-Петербург, 1997



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-04-01 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: