Пример создания базы данных в Access "Деятельность музея"

Рассмотрим основное отношение, соответствующее теме «Деятельность музея»:Код экспоната, Наименование, Код зала, Дата поступления, Автор, Материал, Техника, Наименование зала, Код ответственного, Код сотрудника, ФИО, Оклад, Должность, Код экскурсии, Время проведения, График, Срок действия. Данное отношение находится в первой нормальной форме, поскольку все его атрибуты являются неделимыми и имеет составной ключ: Код экспоната, Код зала, Код сотрудника, Код экскурсии.

      Скачать базу данных в Access

Приведение отношения к третьей нормальной форме

Некоторые атрибуты зависят только от части составного ключа. Устраним частичную зависимость и переведем это отношение во вторую нормальную форму путем декомпозиции основного отношения на следующие отношения:
1) Код экспоната, Наименование, Код зала, Дата поступления, Автор, Материал, Техника
2) Код зала, Наименование зала, Код ответственного
3) Код сотрудника, ФИО, Оклад, Должность
4) Код экскурсии, Время проведения, График, Срок действия, Код ответственного, Стоимость.
Отношения 1,2,3 и 4 находятся в третьей нормальной форме, поскольку они находятся во второй нормальной форме, и каждый неключевой атрибут нетранзитивно зависит от первичного ключа.
Итак, спроектировали 4 таблицы.

Определение ключей и создание связей схемы связей.

Определим первичные и внешние ключи в таблицах и необходимые связи между атрибутами таблиц для обеспечения целостности БД.
В 1-ой таблице первичный ключ - Код экспоната. Атрибут Код зала является внешним ключом к таблице 2. Во 2-ой таблице первичный ключ- Код зала. Атрибут Код ответственного является внешним ключом по отношению к таблице 3. В 3-ей таблице первичный ключ- Код сотрудника. В 4-ой таблице первичный ключ - Код экскурсии, атрибут Код ответственного является внешним ключом по отношению к таблице 3.
Создадим схему связей между атрибутами таблиц для обеспечения целостности БД.

Схема связей базы данных

Создание файла базы данных в СУБД Microsoft Access 2003.

Создадим файл спроектированной БД в СУБД Microsoft Access 2003. Для этого запустим программу Microsoft Access 2003, выберем в окне команду Создать файл, затем в окне Создание файла выберем пункт Новая база данных и укажем диск, каталог и имя «Деятельность музея». 
Создадим таблицы, для этого выберем объект Таблицы и кнопку Создать. В режиме Конструктор создадим таблицы со следующей структурой:

Структура таблицы Экспонаты

Структура таблицы Залы

Структура таблицы Сотрудники

Структура таблицы Экскурсии

Изменение структуры таблиц с помощью SQL запроса

С помощью SQL-запроса изменим структуру таблицы Залы. Добавим атрибут Площадь, тип данных – числовой.
ALTER TABLE Залы ADD COLUMN Площадь FLOAT;

Внесение данных в таблицы.

В окне базы данных выберем объект Таблицы, установим курсор на нужную таблицу и нажмем кнопку Открыть. В режиме Таблицы введем записи в таблицы:

Пример заполнения таблицы Экспонаты

Пример заполнения таблицы Залы

Пример заполнения таблицы Сотрудники

Пример заполнения таблицы Экскурсии

Изменение данных с помощью SQL запросов в MS Access

Запрос на добавление данных в таблицу Залы:
INSERT INTO Залы ( [Код зала], Наименование, [Код ответственного], Площадь )
VALUES (6, "Серебряный", 1, 145);

Запрос на удаление данных из таблицы Сотрудники Удалим записи с фамилией сотрудника, содержащей « Мечникова»: 

DELETE ФИО
FROM Сотрудники
WHERE ФИО LIKE “Мечникова”;

Запрос на обновление данных. В таблице Издания увеличим стоимость объявлений изданий с кодами 1711 и 1712.

UPDATE Сотрудники SET Оклад = Оклад*1.2
WHERE (Сотрудники.Должность Like "*контроллер");

Запрос на создание таблицы Расписание:

SELECT Экскурсии.[Время проведения], Экскурсии.График, Сотрудники.ФИО INTO Расписание
FROM Сотрудники INNER JOIN Экскурсии ON Сотрудники.[Код сотрудника] = Экскурсии.[Код ответственного];

Получим:

Расписание

Время проведения

График

ФИО

10:00:00

суббота

Лисина Л.Б.

11:30:00

ежедневно

Лисина Л.Б.

15:15:00

по четным

Коваленко Т.Ю.

12:00:00

выходные

Коваленко Т.Ю.

15:00:00

по нечетным

Лисина Л.Б.

11:00:00

ежедневно

Быков А.М..

17:00:00

с 1-3 каж. мес.

Быков А.М..

14:00:00

среда

Быков А.М..

12:45:00

среда

Лисина Л.Б.

16:00:00

вторник

Быков А.М..

SQL запросы в Access для выборки данных

Напишем запросы SQL для выборки данных.
SELECT Сотрудники.ФИО, Залы.Наименование, Залы.Площадь
FROM Сотрудники INNER JOIN Залы ON Сотрудники.[Код сотрудника] = Залы.[Код ответственного];
Получим:

Запрос4

ФИО

Наименование

Площадь

Мухина Д.Н.

Главный

185

Мухина Д.Н.

Современный

80

Бондаренко А.С.

Серебряный

145

Бондаренко А.С.

Золотой

68

Астахов Е.А.

Бронзовый

84

Лучко К.С.

Рубиновый

112

Выберем экскурсии, стоимость которых больше 100р и отсортируем по возрастанию цены:
SELECT [Код экскурсии], [Время проведения], График, [Срок действия], Стоимость
FROM Экскурсии
WHERE (Стоимость>100)
ORDER BY Стоимость;

Получим:

Запрос5

Код экскурсии

Время проведения

График

Срок действия

Стоимость

10

16:00:00

вторник

01.08.2010

120,00р.

4

12:00:00

выходные

30.06.2010

120,00р.

7

17:00:00

с 1-3 каж. Мес.

01.08.2010

130,00р.

1

10:00:00

суббота

31.05.2010

150,00р.

Вычислим средний оклад сотрудников музея по должностям:

SELECT Должность, Avg(Оклад) AS [Средний оклад]
FROM Сотрудники
GROUP BY Должность;

Запрос6

Должность

Средний оклад

гл. контроллер

9 120,00р.

искусствовед

9 000,00р.

контроллер

8 040,00р.

тех. сотрудник

4 500,00р.

экскурсовод

9 266,67р.

Вычислим, сколько экскурсий закреплено за каждым экскурсоводом с помощью групповой операции Count:
SELECT Сотрудники.ФИО, Count(Экскурсии.[Код ответственного]) AS [Количество экскурсий]
FROM Сотрудники INNER JOIN Экскурсии ON Сотрудники.[Код сотрудника] = Экскурсии.[Код ответственного]
GROUP BY Сотрудники.ФИО
ORDER BY Count(Экскурсии.[Код ответственного]);

Запрос7

ФИО

Количество экскурсий

Коваленко Т.Ю.

2

Лисина Л.Б.

4

Быков А.М..

4

Создание однотабличного подзапроса:
SELECT Сотрудники.ФИО, Экскурсии.График, Экскурсии.Стоимость
FROM Сотрудники INNER JOIN Экскурсии ON Сотрудники.[Код сотрудника] = Экскурсии.[Код ответственного]
WHERE (Экскурсии.[Код экскурсии]) In (SELECT [Код экскурсии]
FROM Экскурсии
WHERE ([Время проведения]<#12:0:0#));

Запрос8

ФИО

График

Стоимость

Лисина Л.Б.

суббота

150,00р.

Лисина Л.Б.

ежедневно

60,00р.

Быков А.М..

ежедневно

60,00р.

Создание многотабличного подзапроса:
Выберем тех сотрудников, которые ответственны за залы с площадью большей 100 м2:
SELECT Сотрудники.[Код сотрудника], Сотрудники.ФИО, Сотрудники.Должность
FROM Сотрудники
WHERE (Сотрудники.[Код сотрудника]) In (SELECT Залы.[Код ответственного]
FROM Залы
WHERE (Залы.Площадь)>100);

Запрос9

Код сотрудника

ФИО

Должность

1

Мухина Д.Н.

контроллер

3

Бондаренко А.С.

гл. контроллер

7

Лучко К.С.

контроллер