- •Разработка структуры и построение базы данных ms Access
- •1 Методические указания
- •1.1 Основные понятия субд ms Access и методологии разработки структуры базы данных
- •1.2 Пример и алгоритм разработки и построения базы данных ms Access
- •1) Разработка структуры базы данных, на основе список данных, которые необходимо хранить в базе данных включает следующие шаги:
- •2) Создание базы данных ms Access включает следующие шаги:
- •2. Построение базы данных ms Access
- •2 Задания по разработке и построению базы данных
1.2 Пример и алгоритм разработки и построения базы данных ms Access
1) Разработка структуры базы данных, на основе список данных, которые необходимо хранить в базе данных включает следующие шаги:
1.1) Определение состава и структуры базовой (универсальной) таблицы;
1.2) Определение логических связей, первичных ключей и функциональных зависимостей между атрибутами (полями) базовой таблицы;
1.3) Нормализация (разделение) базовой таблицы;
1.4) Определение состава, структуры таблиц;
1.5) Выбор первичных ключей (ключевых полей),
1.6) Нормализация таблиц, определение типов данных;
1.7) Определение типа связей между таблицами;
2) Создание базы данных ms Access включает следующие шаги:
2.1) Создание таблиц MS Access;
2.2) Создание связей между таблицами;
2.3) Создание различных типов запросов;
2.4) Создание форм и отчетов;
2.5) Создание кнопочных форм.
Пример 8.
Разработать структуру базы данных и построить базу данных в MS Access для сбора и обработки данных по результатам сдачи экзаменов и зачетов студентами по разным дисциплинам, на основе следующей информации:
ФИО студента,
Семестр,
Дисциплина,
Форма отчетности,
Оценка,
Количество часов,
ФИО преподавателя.
Должность.
С помощью запросов: вывести список студентов, имеющих отличные оценки по информатике; вывести список студентов имеющих отличные отметки по заданному предмету (предусмотреть ввод названия дисциплины с клавиатуры); найти среднюю оценку каждого студента по всем предметам.
Построить перекрестный запрос, отображающий количество часов по каждой дисциплине и для каждого студента.
Построить составную форму и отчет для просмотра и печати ведомости успеваемости какого-либо студента по разным дисциплинам.
Решение примера 8
1. Разработка структуры базы данных.
1.1 Первоначально создадим базовую таблицу (табл.68, универсальная таблица), которая содержит все перечисленные данные, которые примем за имена полей таблицы. В качестве записей таблицы введем произвольные данные, учитывая при этом, что каждый студент сдает экзамен или зачет по нескольким дисциплинам определенному преподавателю и получает оценку.
Таблица 68 – Универсальная таблица «Сессия»
Фамилия студента |
Семестр |
Дисциплина |
Форма отчетности |
Оценка |
Количество часов |
Фамилия преподавателя |
Должность |
Иванов |
1 |
Биология |
Зачет |
2 |
60 |
Цветкова |
Преподаватель |
Иванов |
1 |
Математика |
Экзамен |
3 |
80 |
Соболев |
Доцент |
Иванов |
1 |
Информатика |
Зачет |
5 |
40 |
Волков |
Профессор |
Иванов |
2 |
Информатика |
Экзамен |
4 |
50 |
Волков |
Профессор |
Петров |
1 |
Биология |
Зачет |
5 |
60 |
Цветкова |
Преподаватель |
Петров |
1 |
Математика |
Экзамен |
4 |
80 |
Соболев |
Доцент |
Петров |
1 |
Информатика |
Зачет |
5 |
40 |
Волков |
Профессор |
Петров |
2 |
Информатика |
Экзамен |
3 |
50 |
Волков |
Профессор |
Сидоров |
3 |
Статистика |
Зачет |
4 |
32 |
Соболев |
Доцент |
Сидоров |
4 |
Статистика |
Экзамен |
4 |
36 |
Волков |
Профессор |
Сидоров |
3 |
Экономика |
Зачет |
5 |
24 |
Белкина |
Ассистент |
Сидоров |
4 |
Экономика |
Экзамен |
4 |
28 |
Медведев |
Профессор |
1.2 Определим функциональные зависимости и ключевые поля для таблицы 1. Предположим, что каждый студент сдаёт один раз экзамен (зачет) по дисциплине согласно учебному плану. Каждая дисциплина однозначно характеризуется наименованием, номером семестра, в котором изучается предмет, и формой отчетности. Тогда в качестве первичного (составного) ключа таблицы Сессия можно использовать следующий набор полей:
Фамилия студента, Дисциплина, Семестр, Форма отчетности.
Остальные неключевые поля табл.68 будут функционально зависеть от какой-либо части составного ключа.
1.3 Проведем нормализацию табл. 68 в соответствии с правилами нормализации и определениями нормальных форм. Так как поля таблицы 68 – Фамилия преподавателя, Количество часов и Должностьфункционально зависят только от полейДисциплина, СеместриФорма отчетности. Тогда, согласно первому правилу нормализации, выделим в отдельную таблицу 69Учебный планполя –Дисциплина, Семестр, Форма отчетности, Количество часов, Фамилия преподавателя, Должность(ключевые поля подчеркнуты).
Таблица 69 – Учебный план
Дисциплина |
Семе-стр |
Форма отчетности |
Количество часов |
Фамилия преподавателя |
Должность |
Биология |
1 |
Зачет |
60 |
Цветкова |
Преподаватель |
Математика |
1 |
Экзамен |
80 |
Соболев |
Доцент |
Информатика |
1 |
Зачет |
40 |
Волков |
Профессор |
Информатика |
2 |
Экзамен |
50 |
Волков |
Профессор |
Биология |
1 |
Зачет |
60 |
Цветкова |
Преподаватель |
Математика |
1 |
Экзамен |
80 |
Соболев |
Доцент |
Информатика |
1 |
Зачет |
40 |
Волков |
Профессор |
Информатика |
2 |
Экзамен |
50 |
Волков |
Профессор |
Статистика |
3 |
Зачет |
32 |
Соболев |
Доцент |
Статистика |
4 |
Экзамен |
36 |
Волков |
Профессор |
Экономика |
3 |
Зачет |
24 |
Белкина |
Ассистент |
Экономика |
4 |
Экзамен |
28 |
Медведев |
Профессор |
Соответственно из исходной таблицы 68 поля Фамилия преподавателя, Количество часовиДолжностьудаляются. Из оставшихся полей сформируем таблицу 70Результаты сессии–Фамилия студента, Дисциплина, Семестр, Форма отчетности, Оценка.
Таблица 70 – Результаты сессии
Фамилия студента |
Дисциплина |
Семестр |
Форма отчетности |
Оценка |
Иванов |
Биология |
1 |
Зачет |
2 |
Иванов |
Математика |
1 |
Экзамен |
3 |
Иванов |
Информатика |
1 |
Зачет |
5 |
Иванов |
Информатика |
2 |
Экзамен |
4 |
Петров |
Биология |
1 |
Зачет |
5 |
Петров |
Математика |
1 |
Экзамен |
4 |
Петров |
Информатика |
1 |
Зачет |
5 |
Петров |
Информатика |
2 |
Экзамен |
3 |
Сидоров |
Статистика |
3 |
Зачет |
4 |
Сидоров |
Статистика |
4 |
Экзамен |
4 |
Сидоров |
Экономика |
3 |
Зачет |
5 |
Сидоров |
Экономика |
4 |
Экзамен |
4 |
1.4 Анализируя таблицу 69 очевидно, что они не соответствуют требованиям третьей нормальной формы, так как поле Должностьфункционально зависит от неключевого поляФамилия преподавателя. Соответственно, используя второе правило нормализации, выделим поляФамилия преподавателя и Должностьв отдельную таблицу 71 «Кадровый состав» и исключим из таблицы 69 полеДолжность. При этом в таблицу 71 для однозначной идентификации каждого преподавателя введем ключевое полеКод преподавателя.
Таблица 71 – Кадровый состав
Код преподавателя |
Фамилия |
Должность |
1 |
Волков |
Профессор |
2 |
Белкина |
Ассистент |
3 |
Медведев |
Профессор |
4 |
Соболев |
Доцент |
5 |
Цветкова |
Преподаватель |
1.5 Анализируя таблицы 69 и 70 видно, что ключевые поля Дисциплина, Семестр, Форма отчетностив этих таблицах повторяются. Это приводит кизбыточностии дублированию информации сразу в трех полях, поэтому целесообразно ввести вместо трех указанных ключевых полей одно ключевое полеКод учебного планав таблицы 69 и 70. Также очевидно, что полеФамилия студентане может однозначно идентифицировать студента, так как возможны однофамильцы, поэтому это поле выделим в отдельную таблицу 72 «Студенты», в которой введем новое полеКод студента.
Таблица 72 – Студенты
Код студента |
Фамилия студента |
1 |
Иванов |
2 |
Петров |
3 |
Сидоров |
Рассматривая подробнее таблицу 69 Учебный план, видно, что наименование Дисциплин многократно повторяются и есть вероятность сделать ошибки при вводе одного и того же наименования. При этом может возникнуть потенциальная противоречивостьданных. Поэтому, выделим поле дисциплины в отдельную таблицу 73 «Дисциплины», а для однозначной идентификации дисциплин введем поле Код дисциплины.
Таблица 73 – Дисциплины
Код дисциплины |
Наименование дисциплины |
1 |
Биология |
2 |
Математика |
3 |
Информатика |
4 |
Статистика |
5 |
Экономика |
1.6 Преобразуем таблицы 69 и 70 в соответствии с выполненными изменениями. В таблице 69 вместо полей Фамилия студентавведем полеКод студента, вместо поляДисциплина– полеКод дисциплины, вместо поляПреподаватель–Код преподавателя. В таблице 70 вместо полейДисциплина, Семестр, Форма отчетностивведем полеКод учебного планаи вместо поляФамилия студента– полеКод студента. В результате преобразований получим таблицы 74 и 75.
Таблица 74 –Учебный план (итоговая)
Код учебного плана |
Код дисциплины |
Семестр |
Количество часов |
Форма отчетности |
Код преподавателя |
1 |
1 |
1 |
60 |
Зачет |
5 |
2 |
2 |
1 |
80 |
Экзамен |
4 |
3 |
3 |
1 |
40 |
Зачет |
1 |
4 |
3 |
2 |
50 |
Экзамен |
1 |
5 |
4 |
3 |
32 |
Зачет |
4 |
6 |
4 |
4 |
36 |
Экзамен |
1 |
7 |
5 |
3 |
24 |
Зачет |
2 |
8 |
5 |
4 |
28 |
Экзамен |
3 |
Таблица 75 – Результаты сессии (итоговая)
Код студента |
Код учебного плана |
Оценка |
1 |
1 |
2 |
1 |
2 |
3 |
1 |
3 |
5 |
1 |
4 |
4 |
2 |
1 |
5 |
2 |
2 |
4 |
2 |
3 |
5 |
2 |
4 |
3 |
3 |
5 |
4 |
3 |
6 |
4 |
3 |
7 |
5 |
3 |
8 |
4 |
Все таблицы базы данных (табл. 71-75) находятся в первой, второй и третьей нормальной формах, то есть все поля каждой из таблиц неделимы и зависят от ключевого поля и значение любого поля в этих таблицах, не входящих в первичный ключ, не зависит от значений другого неключевого поля.
Следует отметить, что если бы вместо поля Фамилия студентав базе данных использовалось полеФИО студента, то для того чтобы соблюдалсяпринцип неделимостиполей, в соответствии с требованиями первой нормальной формы, следовало бы в таблице Студенты дополнительно разделить полеФИО студентына поляФамилия,Имя,Отчество
1.7 Определение связей между таблицами. Связь между таблицами реализуется за счет одинаковых полей в связываемых таблицах. Чтобы связать две таблицы необходимо ключ первой таблицы ввести в состав ключа второй таблицы. В противном случае нужно ввести в состав первой таблицы внешний ключ – ключ второй таблицы. В структуре разработанных таблиц 71-75 уже имеются одинаковые поля. Соответственно следует установить связи между следующими полями (см.рис.50):
Код учебного плана(табл. Учебный план) иКод учебного плана(табл. Результаты сессии) – связь один–ко–многим;
Код студента(табл. Студенты) иКод студента(табл. Результаты сессии) – связь один–ко–многим;
Код дисциплины(табл. Дисциплины) иКод дисциплины(табл. Учебный план) – связь один–ко–многим;
Код преподавателя(табл. Преподаватели) иКод преподавателя(табл. Учебный план) – связь один–ко–многим.
1.8 Определение типов данных и ограничений. Разные типы полей имеют разное назначение и разные свойства. Как правило, для ключевых полей, содержащих числовые данные, такие как Код студента,Код дисциплинывыбирают тип данныхСчетчикилиЧисловой, а ограниченияЗначение уникальноиЗначение не должно быть пустым. Для полей типаФамилия,Дисциплинавыбирают тип данныхТекстовый, а ограниченияРазмер строки символовиЗначение не должно быть пустым.
Поля для ввода дат или времени имеют тип Дата/время. Поля для ввода денежных сумм имеют тип Денежный. Поля для хранения внешних объектов (рисунков, таблиц, аудиозаписей и так далее) имеют тип OLE, а для хранения текста тип МЕМО.