Языки реляционных БД
Информация - Компьютеры, программирование
Другие материалы по предмету Компьютеры, программирование
И#КолИ1 И2 И3 И1300 200 200 200
Запрос 4
Какие изделия поставляются поставщиком П2 в количестве 500 единиц.
Ответ:
ПОСТАВКИП#И#КолП#И#КолП2Р.500П2И2500
Языки QBE, реализованные в коммерческих СУБД, обладают многочисленными дополнительными средствами манипулирования данными.
4.Использование реляционной алгебры для составления запросов к БД
Для полученной ранее модели данных, состоящей из трех нормализованных отношений ПОСТАВЩИК, ПОСТАВКИ, ДОСТАВКА составим запросы, запишем их в виде формул реляционной алгебры и получим результаты для каждого запроса.
При составлении запросов и вычислении формул следует помнить о том, что результатом выполнения любой операции над отношением является новое отношение, к которому, в свою очередь, можно применить любую операцию реляционной алгебры. Эта важная идея создания новых таблиц на основе старых позволяет составлять запросы любой сложности.
Запрос 1
Сообщить название фирмы-поставщика П1.
Мы получим ответ на этот запрос, если из таблицы ПОСТАВЩИК выделим строку, содержащую сведения о поставщике П1. Это можно сделать, выполнив операцию сцепления отношения ПОСТАВЩИК с известной из запроса константой П1 (т.е. выполнив операцию сцепления отношения с одноэлементным множеством {П1}).
ПОСТАВЩИК * {П1}
В результате выполнения операции получим новое отношение, состоящее из единственного кортежа (т.е. таблицу, состоящую из одной строки).
П1ВосходТула
Полученная строка содержит лишние сведения. Уточним ответ, применив к вновь полученному отношению операцию проекции на атрибут Имя поставщика. Полученная формула и является формулой запроса.
ПОСТАВЩИК * {П1} [Имя поставщика]
В результате будет выделен один столбец. Это и будет ответом на запрос.
Восход
Запрос 2
В каком количестве поставляются изделия И2?
Искомые сведения находятся в таблице ПОСТАВКИ. Аналогично Запросу 1 применим к отношению ПОСТАВКИ операцию сцепления с известной константой И2, а затем спроектируем полученное отношение на атрибут Кол.
ПОСТАВКИ * {И2} [Кол]
Результаты выполнения операций
П1 П2И2 И2200 500
200 500
Запрос 3
Сколько изделий И2 поставляет фирма Заря?
В этом запросе известными являются значения двух атрибутов: Имя поставщика Заря и номер изделия - И2. Известные и искомые данные находятся в двух таблицах: ПОСТАВЩИК и ПОСТАВКИ, поэтому для ответа на запрос необходимо "привязать" сведения из одной таблицы к сведениям из другой таблицы. Это можно сделать, выполнив операцию сцепления отношений по атрибуту П#.
Для выработки ответа на запрос выполним следующие действия:
узнаем значение атрибута П#, выполнив операцию сцепления отношения ПОСТАВЩИК с одноэлементным множеством Заря;
выполним операцию сцепления полученного результата с отношением ПОСТАВКИ по атрибуту П#;
выполнив операцию сцепление отношения с одноэлементным множеством, выделим кортежи, содержащие сведения об изделии И2;
и, наконец, выполним проекцию на атрибут Кол.
Запишем формулу запроса.
ПОСТАВЩИК * {Заря} * ПОСТАВКИ * {И2} [Кол]
Определим результаты выполнения каждой из операций.
. В результате выполнения операции сцепления отношения ПОСТАВЩИК с одноэлементным множеством {Заря} получим новое отношение, содержащее единственный кортеж (т.е. новую таблицу, состоящую из одной строки).
П2ЗаряСамара
. Вторая операция выполняет сцепление полученного отношения, имеющего арность 3, с отношением ПОСТАВКИ, имеющим также арность 3, по одинаковому значению атрибута П#. В результате получим новое отношение арностью 5. В него войдут все кортежи сцепляемых отношений, у которых значение атрибута П# = П2.
П2ЗаряСамараИ1200П2ЗаряСамараИ2500
. В результате выполнения третьей операции из полученного отношения выберутся строки, в которых значение атрибута И# равно И2.
. С помощью операции проекции уточним ответ, выделив столбец Кол.
П2ЗаряСамараИ2500500
Запрос 4
Какие поставщики и по какому тарифу поставляют изделие И2?
Известное данное (номер изделия П2) находится в таблице ПОСТАВКИ, а искомые данные (имя поставщика и тариф) - в таблицах ПОСТАВЩИК и ДОСТАВКА. Поэтому для выработки ответа на запрос необходимо связать данные из трех таблиц.
Из отношения ПОСТАВКИ с помощью операции сцепления отношения с одноэлементным множеством {И2} выделим кортежи, содержащие номера поставщиков, поставляющих изделие И2. Затем выполним сцепление полученного отношения с отношением ПОСТАВЩИК по атрибуту П#. Получим отношение, содержащее атрибут с названиями городов, из которых доставляются изделия И2. Операция сцепления полученного отношения с отношением ДОСТАВКА по атрибуту Город сформирует отношение, содержащее атрибуты с искомыми данными. Наконец, выполнив проекцию этого отношения на атрибуты Имя поставщика и Тариф, выделим искомые данные.
Запишем формулу запроса.
ПОСТАВКИ * {И2} * ПОСТАВЩИК * ДОСТАВКА [Имя поставщика, Тариф]
Определим результаты выполнения каждой операции (все операции в формуле и получаемые результаты пронумерованы).
П1И2200П1И2200ВосходТулаП2И2500П2И2500ЗаряСамараП1И2200ВосходТула10Восход10П2И2500ЗаряСамара15Заря15
Можно заметить, что в результате последовательного выполнения нескольких операций сцепления арность отношений растет, т.е. в таблицах увеличивается количество сто?/p>