Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3 курс БД Лаба №2.docx
Скачиваний:
22
Добавлен:
04.06.2015
Размер:
137.51 Кб
Скачать

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «Национальный исследовательский ядерный университет «МИФИ»

Кафедра №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 Место_Хранения.Номер_Зала;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]