Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «Национальный исследовательский ядерный университет «МИФИ»
Кафедра №28 «Системного анализа»
Лабораторная работа №2
«ПРОЕКТИРОВАНИЕ
БАЗЫ ДАННЫХ
С ИСПОЛЬЗОВАНИЕМ
УНИВЕРСАЛЬНОГО
ОТНОШЕНИЯ»
По курсу «Базы данных»
Работу выполнил:
Студент группы К6-281 Монанков Кирилл Викторович
Работу проверила:
Голицына Ольга Леонидовна
2013
Вариант №12
ФИО преподава теля
|
Кафедра
|
Название курса
|
Вид изда- ния |
Наименование |
Кол-во экземпля- ров
|
№ зала
|
Дата выдачи |
Преподаватели кафедр пользуются читальными залами библиотеки
ВУЗа для проведения занятий по разным курсам.
На отдельное занятие преподаватель может взять некоторое количество
экземпляров изданий определенного вида (учебник, учебное пособие, лабо-
раторный практикум и т.п.) для раздачи студентам.
Все экземпляры отдельного наименования хранятся в одном зале.
Запросы:
a) (*) выдать список преподавателей, которые в разное время использова-
ли на занятиях издания заданного вида для заданного курса;
b) (*) выдать список названий курсов, для которых используется литера-
тура, хранящаяся в заданном зале;
c) (*) выдать список преподавателей заданной кафедры, которые пользо-
вались читальными залами в заданный период времени;
d) сформировать количественное распределение наименований изданий
по курсам (с указанием максимального количества выданных экземп-
ляров);
e) сформировать список наименований изданий, которые использовались
для проведения занятий более чем по одному курсу;
f) сформировать количественное распределение наименований изданий
по залам.
Универсальное отношение:
Преподаватель в библиотеке (Ф.И.О., Кафедра, Название курса, Наименование, Вид издания, Номер зала, Дата выдачи, Количество экземпляров)
В качестве первичного ключа универсального отношения выделена совокупность атрибутов: Ф.И.О., Название курса, Наименование, Дата выдачи.
В соответствии с процедурой нормализации проведена декомпозиция
универсального отношения, получены следующие отношения:
Преподаватель в библиотеке (Ф.И.О., Название курса, Наименование, Дата выдачи, Количество экземпляров)
Преподаватель (Ф.И.О, кафедра)
Издание (Наименование, Вид издания)
Место хранения (Наименование, Номер зала)
Физическая структура таблиц бд в субд Access:
Таблица Преподаватель_В_Библиотеке:
Имя поля |
Тип данных |
Размер поля (байт) |
ФИО (PK) |
Текстовый |
50 |
Название_Курса (PK) |
Текстовый |
50 |
Наименование (PK) |
Текстовый |
50 |
Количество_Экз |
Числовой |
2 |
Дата_Выдачи (PK) |
Дата/Время |
8 |
Таблица Преподаватель:
Имя поля |
Тип данных |
Размер поля (байт) |
ФИО (PK) |
Текстовый |
50 |
Номер_Кафедры |
Числовой |
2 |
Таблица Издание:
Имя поля |
Тип данных |
Размер поля (байт) |
Наименование (PK) |
Текстовый |
50 |
Вид_Издания |
Текстовый |
50 |
Таблица Место_Хранения:
Имя поля |
Тип данных |
Размер поля (байт) |
Наименование (PK) |
Текстовый |
50 |
Номер_Зала |
Числовой |
2 |
Схема данных:
Запросы на языке реляционной алгебры
(a)выдать список преподавателей, которые в разное время использовали на занятиях издания заданного вида для заданного курса;
R1=
R2=
(
(b) выдать список названий курсов, для которых используется литера-
тура, хранящаяся в заданном зале;
(
(c) выдать список преподавателей заданной кафедры, которые пользовались читальными залами в заданный период времени;
R1=
(
Запросы на языке SQL и иллюстрация их выполнения в СУБД Access
(a) выдать список преподавателей, которые в разное время использовали на занятиях издания заданного вида для заданного курса;
SELECT Преподаватель_В_Библиотеке.ФИО
FROM Преподаватель_В_Библиотеке INNER JOIN Издание ON Преподаватель_В_Библиотеке.Наименование = Издание.Наименование
WHERE (((Преподаватель_В_Библиотеке.Названипе_Курса)="Физика") AND ((Издание.Вид_Издания)="учебник"));
b) выдать список названий курсов, для которых используется литера-
тура, хранящаяся в заданном зале;
SELECT Преподаватель_В_Библиотеке.Названипе_Курса
FROM Преподаватель_В_Библиотеке INNER JOIN Место_Хранения ON Преподаватель_В_Библиотеке.Наименование = Место_Хранения.Наименование
WHERE (((Место_Хранения.Номер_Зала)=1));
c) выдать список преподавателей заданной кафедры, которые пользо-
вались читальными залами в заданный период времени;
SELECT Преподаватель_В_Библиотеке.ФИО, Преподаватель_В_Библиотеке.Дата_Выдачи
FROM Преподаватель_В_Библиотеке INNER JOIN Преподаватель ON Преподаватель_В_Библиотеке.ФИО = Преподаватель.ФИО
WHERE (((Преподаватель_В_Библиотеке.Дата_Выдачи)>#5/11/2013# And (Преподаватель_В_Библиотеке.Дата_Выдачи)<#5/20/2013#) AND ((Преподаватель.Номер_Кафедры)=28));
d) сформировать количественное распределение наименований изданий
по курсам (с указанием максимального количества выданных экземп-
ляров);
SELECT Sum(Преподаватель_В_Библиотеке.Количество_Экз) AS [Sum-Количество_Экз], Преподаватель_В_Библиотеке.Наименование
FROM Преподаватель_В_Библиотеке
GROUP BY Преподаватель_В_Библиотеке.Наименование, Преподаватель_В_Библиотеке.Названипе_Курса
HAVING (((Преподаватель_В_Библиотеке.Названипе_Курса)="Физика"))
ORDER BY Sum(Преподаватель_В_Библиотеке.Количество_Экз) DESC;
e) сформировать список наименований изданий, которые использовались
для проведения занятий более чем по одному курсу;
1) SELECT DISTINCT Преподаватель_В_Библиотеке.Названипе_Курса, Преподаватель_В_Библиотеке.Наименование
FROM Преподаватель_В_Библиотеке
GROUP BY Преподаватель_В_Библиотеке.Названипе_Курса, Преподаватель_В_Библиотеке.Наименование;
2) SELECT Count([Запрос (e)].Названипе_Курса) AS [Count-Названипе_Курса], [Запрос (e)].Наименование
FROM [Запрос (e)]
GROUP BY [Запрос (e)].Наименование
HAVING (((Count([Запрос (e)].Названипе_Курса))>1));
f) сформировать количественное распределение наименований изданий
по залам.
1) SELECT Место_Хранения.Номер_Зала, Sum(Преподаватель_В_Библиотеке.Количество_Экз) AS [Sum-Количество_Экз1]
FROM Преподаватель_В_Библиотеке INNER JOIN Место_Хранения ON Преподаватель_В_Библиотеке.Наименование = Место_Хранения.Наименование
GROUP BY Место_Хранения.Номер_Зала
ORDER BY Место_Хранения.Номер_Зала;
2) SELECT Место_Хранения.Номер_Зала, Count(Преподаватель_В_Библиотеке.Наименование) AS [Count-Наименование]
FROM Преподаватель_В_Библиотеке INNER JOIN Место_Хранения ON Преподаватель_В_Библиотеке.Наименование = Место_Хранения.Наименование
GROUP BY Место_Хранения.Номер_Зала;