Задание №4

advertisement
З а д а н и е № 4.
По курсовому проекту:
Внимание: Курсовой проект представляется в электронном виде, домашнее задание
представляется, как обычно, в письменном виде.
1. Напишите не менее трех запросов к вашей базе данных, используя команду SQL
select-from-where. Для получения более высокой оценки по данному заданию, вы
должны сформулировать один из запросов таким образом, чтобы он содержал
некоторые интересные возможности SQL: запрос к нескольким таблицам,
подзапрос и т.п. Проэкпериментируйте с запросами на небольшой базе (т.е. с базой,
данные в которую занесены вручную), прежде чем выполнять их на базе с
данными, полученными генератором. Это позволит проверить правильность
выполнения запросов. После того, как вы убедитесь, что запросы работают, т.е.
выполняются правильно, запустите их выполнение на полной базе. Если один или
несколько «интересных» запросов возвратят пустой результат, то проверьте, все ли
инструкции по генерации данных выполнены. Если необходимо, то
откорректируйте программу генерации данных. Поместите команды SQL в
сценарий, который должен продемонстрировать их выполнение. Постарайтесь не
формулировать таких запросов, которые возвращают очень большое количество
данных или очень длинные строки.
2. Напишите не менее трех команд модификации данных вашей базы. Все эти
команды должны быть «интересными», т.е. включать сложные элементы SQL,
например, вставка результата запроса, модификация всех кортежей сразу, или
удаление набора кортежей, который содержит больше чем один, но меньше чем все
кортежи в соотношении. Как и в (1) отладьте команды на небольшой базе, затем
запустите на полной базе. Команды включите в сценарий.
3. Создайте два представления в вашей базе данных. Включите в сценарий ваши
команды CREATE VIEW для демонстрации результата их работы. Сформулируйте
по 1 запросу к каждому представлению и продемонстрируйте их результаты
(сформулируйте запросы так, чтобы результат их выполнения не содержал
большое количество кортежей). Кроме этого, включите в сценарий демонстрацию
результата модификации 1 представления, например, добавление нескольких
новых строк. Можно ли модифицировать представление? Объясните, почему да
или нет. (Как правило, представление является обновляемым, если оно построено
на основе одной таблицы.)
4. При выполнении (1) возможно, что некоторые запросы выполняются очень
медленно на большой базе данных. Чтобы ускорить выполнение запросов, создайте
индексы. Индекс по значениям столбца A отношения R позволяет быстро
осуществлять поиск кортежей в R с данным значением атрибута A. Такой индекс
полезен, если значение определено в запросе (в опции "WHERE"). Индекс может
быть полезен, если A включается в объединение, которое сравнивает его с другим
атрибутом. Например, в запросе
SELECT Bars.address
FROM Drinkers, Bars
WHERE Drinkers.name = 'joe'
AND Drinkers.frequents = Bars.name;
можно использовать индекс по Drinkers.name для ускорения поиска кортежей для
Joe, можно использовать индекс по Bars.name, чтобы выбрать все бары, в которых
Joe является частым посетителям и быстро найти все кортежи для этих баров и
прочитать их адреса.
В Oracle, для создания индекса используется команда:
CREATE INDEX <IndexName> ON <RelName>(<Attribute List>);
Замечание:
 Oracle создает индексы автоматически, если атрибут(ы) определяется как
PRIMARY KEY или UNIQUE. Так, некоторые индексы могут быть уже
созданы и уже ускоряют выполнение запроса. Не забывайте об этом, когда
будете объяснять различное время выполнения запроса. Если вы не видите
различия во времени выполнения запроса с индексом и без индекса, то
попытайтесь убрать объявления первичных ключей и уникальных значений,
чтобы Oracle не создавал индексов по таким атрибутам автоматически.
Если список атрибутов содержит более одного атрибута, то для поиска кортежей
требуется указать значения всех атрибутов.
Это может пригодиться, если ключ состоит из нескольких атрибутов. Пример
команд CREATE INDEX
CREATE INDEX DrinkerInd ON Drinkers(name);
CREATE INDEX BarInd ON Bars(name);
которые создают два индекса. Для удаления индекса используется команда DROP
INDEX, за которой следует имя индекса. Заметим, что каждый индекс должен
иметь имя, на которое мы ссылаемся при удалении индекса. При автоматическом
создании индекса, например, для первичного ключа, имя индекса выбирается
системой. Предпочтительно избегать автоматической генерации имени индекса
или ограничения, так как это может приводить к неудобствам при обслуживании
индексов и ограничений. Лучше, если имя индекса или ограничения задается явно
при его создании и имеет содержательную мнемонику, отражающую смысл.
Создайте, по крайней мере, два полезных индекса для вашего приложения.
Выполните ваши запросы из (1) для большой базы данных с индексами и без
индексов. Для получения времени выполнения запросов можно использовать
команды sqlplus:
1. TIMING START <TimerName>; запускает таймер. Имя таймера может быть
любым.
2. TIMING SHOW; выводит текущее время с таймера. (Имеется возможность
изменять таймеры, поэтому таймеру дается имя, но эту возможность можно
не использовать.)
3. TIMING STOP; выводит текущее время с таймера и останавливает его.
Естественно, что на время выполнения могут повлиять внешние факторы,
например, загрузка системы и т.п. Тем не менее, разница во времени выполнения
запросов с индексами и без них должна быть заметна на достаточно больших
таблицах. Включите в сценарий команды создания индексов и покажите время
выполнения запросов с индексами и без них.
Замечание: Часто можно обнаружить, что индексы не уменьшают время
выполнения запроса. Следует обратить внимание на следующее:
1. Запрос к нескольким таблицам не будет выполняться быстрее, если не будет
индексов для всех атрибутов таблиц, участвующих в выборке и сравнении.
Единственный индекс может только увеличить число операций
ввода/вывода, необходимых для чтения индекса, не оказывая влияния на
запрос в целом.
2. Если запустить запрос во второй или третий раз подряд, он может
потребовать меньше времени, чем первый из-за того, что информация,
необходимая для запроса еще находится в оперативной памяти и требует
меньше (или не требует совсем) физических операций ввода/вывода.
Данные могут кешироваться (временно храниться в оперативной памяти) в
двух местах: на Oracle сервере или на компьютере-клиенте. Если много
студентов используют Oracle одновременно, ваши данные будут с большей
вероятностью вытесняться из кеша сервера, если вы подождете некоторое
время (несколько секунд или десятков секунд). Вытесняются ли данные из
кеша компьютера клиента зависит от того, насколько он загружен.
Рекомендуется, чтобы вы засекали время работы запроса только один раз за
сессию, затем выходили из sqlplus, и запускали его снова. Если получаются
странные результаты, вы, возможно, должны будете подождать несколько
минут между запусками.
Домашнее задание (20 баллов):
1. Пусть есть база данных с отношениями:
Компания (№ отделения, улица, район, Город, Индекс, Тел, Факс)
Сотрудник (Таб.№, ФИО, Адрес, Зарплата, ИНН, № отделения, должность)
Арендатор (№ арендатора, ФИО, адрес, Тел., № отделения)
Объект (№ объекта, улица, город, площадь, Таб.№, № отделения, плата, тип)
Просмотр(№ объекта, № арендатора, Дата, Комментарии)
Напишите запросы на языке SQL:
1. Выбрать адреса всех отделений в Москве и Казани. (1).
2. Список сотрудников, у которых, зарплата выше средней зарплаты. (1).
3. Список сотрудников, которые живут и работают в одном и том же
городе.(2).
4. Количество сдаваемых в аренду объектов в каждом городе, где арендная
плата меньше 300 (1).
5. Список сдаваемых объектов, упорядоченный по типу и арендой плате.(1)
6. Список всех посещенных объектов в Казани, по которым не было
комментариев (2).
2. Пусть есть база данных с отношениями:
Поставщики(№п, Город, ФИО)
Детали (№_д, Название, цвет, вес, Город где хранится деталь )
Поставки (№_д, №_п, кол-во, №_пр)
Проекты (№_пр, Название, город, result)
Напишите запросы на языке SQL:
1. Получить номера деталей поставляемых поставщиком из Казани или для
Казанского проекта (2).
2. Для каждой детали получить № детали, № проекта, и общее количество (2).
3. Получить названия проектов, обеспечиваемые поставщиком c номером S1(1).
4. Получить сочетание цвет детали - город детали(1).
5. Получить кол-во деталей поставляемых поставщиком S1 (1).
3.
Пусть есть база данных с отношениями:
МУЗЫКАНТЫ (муз_номер, муз_имя, муз_дата_рождения, муз_страна_рождения)
СОЧИНЕНИЯ (соч_номер, соч_название, муз_номер, соч_дата_сочинения)
АНСАМБЛИ (анс_номер, анс_название, анс_страна, муз_номер)
ИСПОЛНЕНИЯ (соч_номер, исп_дата, исп_город, исп_страна, муз_номер, анс_номер)
ИСПОЛНИТЕЛИ (испл_номер, муз_номер, испл_инструмент, испл_оценка_качества)
УЧАСТНИКИ_АНСАМБЛЕЙ (анс_номер, испл_номер)
Напишите запросы на языке SQL:
1. перечислить названия всех музыкальных произведений, созданных после
того, как родился П.И.Чайковский. (1)
2. назвать имена всех музыкантов, не сочиняющих произведений. (1)
3. перечислить названия всех канадских ансамблей, среди участников которых
есть саксофонисты. (1)
4. перечислить страны, города и даты концертов, на которых композиторы
дирижировали исполнением собственных сочинений. (2)
указать даты исполнения произведений, созданными композиторами – уроженцами
России
Download