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

Рассмотрим основное отношение, соответствующее варианту задания «Деятельность спортивного клуба»:
Код клиента, фамилия имя, телефон, код абонемента, описание, цена, код зала, наименование, код тренера, фамилия имя тренера, оклад, месяц, произведена оплата. Спроектируем базу данных.

      Скачать базу данных "Спортивный клуб" в Access

Определим атрибуты и их типы значений

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

Данное отношение находится в первой нормальной форме, поскольку все его атрибуты являются неделимыми, и имеет составной ключ: Код клиента, код зала, код тренера, код абонемента.

Некоторые атрибуты зависят только от части составного ключа. Устраним частичную зависимость и переведем это отношение во вторую нормальную форму путем декомпозиции основного отношения на следующие отношения:

1) код клиента, фамилия имя, телефон, код тренера; 
2) код абонемента, описание, цена, код зала;
3) код зала, наименование;
4) код тренера, фамилия имя тренера, оклад;
5) код клиента, код абонемента, месяц, произведена оплата.

Отношения 1,2,3,4,5  находятся в третьей нормальной форме, поскольку они находятся во второй нормальной форме, и каждый неключевой атрибут нетранзитивно зависит от первичного ключа.

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

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

Схема связей базы данных в Access "Деятельность cпортивного клуба"

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

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

С помощью запроса изменим структуру таблицы: В таблицу Тренеры добавим атрибут Телефон:
ALTER TABLE Тренеры ADD COLUMN Телефон CHAR(10);

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

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

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

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

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

Создание SQL запросов в MS Access для манипулирования данными

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

CREATE TABLE Тренеры (Код_тренера  INT NOT NULL PRIMARY KEY, Фамилия_имя_тренера CHAR (40) NOT NULL, Оклад MONEY NOT NULL);

Запрос на добавление данных в таблицу Залы: 

INSERT INTO Залы ( Код_зала, Наименование )
VALUES (1001, 'Бассейн 25м');

Запрос на обновление данных в таблице Абонементы – ежемесячную цену поднимем на 10%

UPDATE Абонементы SET Абонементы.Цена = "Цена*1,1";

Запрос на удаление данных из таблицы Учет – удалим записи января месяца:

DELETE Учет.Месяц
FROM Учет
WHERE Учет.Месяц="январь";

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

Напишем запросы SQL для выборки данных.

Выберем клиентов, занимающихся в бассейне 25м:
SELECT Клиенты.Код_клиента, Клиенты.Фамилия, Клиенты.Имя, Залы.Код_зала
FROM Клиенты INNER JOIN (Залы INNER JOIN (Абонементы INNER JOIN Учет ON Абонементы.Код_абонемента=Учет.Код_абонемента) ON Залы.Код_зала=Абонементы.Код_зала) ON Клиенты.Код_клиента=Учет.Код_клиента
GROUP BY Клиенты.Код_клиента, Клиенты.Фамилия, Клиенты.Имя, Залы.Код_зала
HAVING (((Залы.Код_зала)=1001));

Получим:

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

Подсчитаем количество человек, занимающихся у каждого тренера:
SELECT Тренеры.Код_тренера, Тренеры.Фамилия_имя_тренера, Count(Клиенты.Код_клиента) AS Количество
FROM Тренеры INNER JOIN Клиенты ON Тренеры.Код_тренера = Клиенты.Код_тренера
GROUP BY Тренеры.Код_тренера, Тренеры.Фамилия_имя_тренера;

Получим:

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

 

Вычислим премию для тренеров с больше чем одним клиентом в виде 40% от оклада:
SELECT Тренеры.Код_тренера, Тренеры.Фамилия_имя_тренера, Count(Клиенты.Код_клиента) AS Количество, [Оклад]*0.4 AS Премия
FROM Тренеры INNER JOIN Клиенты ON Тренеры.Код_тренера=Клиенты.Код_тренера
GROUP BY Тренеры.Код_тренера, Тренеры.Фамилия_имя_тренера, [Оклад]*0.4
HAVING (((Count(Клиенты.Код_клиента))>1));

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

Выберем клиентов-должников

SELECT Клиенты.Код_клиента, Учет.Произведена_оплата
FROM Клиенты INNER JOIN Учет ON Клиенты.Код_клиента = Учет.Код_клиента
WHERE (((Учет.Произведена_оплата)=No));

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

Создание однотабличного подзапроса:

SELECT Клиенты.Код_клиента, Клиенты.Фамилия, Клиенты.Имя
FROM Клиенты
WHERE (((Клиенты.Код_клиента) In (SELECT Учет.Код_клиента FROM Учет
WHERE (Учет.Месяц)="июнь")));

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