Рассмотрим задачу проектирования БД на базе сводной таблицы, пример которой приведен на рис. 6.1. Предложенная таблица отражает результаты сдачи сессии (шкала оценок: 0 – незачет; 1 – зачет; 2, 3, 4, 5 – экзаменационная оценка).
Этот вариант таблицы «Сессия» не является отношением, так как большинство ее столбцов не атомарны. Атомарными являются лишь значения столбцов «ФИО студента», «Семестр». Остальные столбцы таблицы – множественные.
Для преобразования данных в отношение необходимо реконструировать таблицу, например, с помощью простого процесса вставки, результат которой показан на рис. 6.2.
Однако очевидно, что такое преобразование приводит к возникновению большого объема избыточных данных.
|
Рис. 6.1. Исходные данные для создания БД «Сессия»
Таблица на рис. 6.2 представляет собой корректное отношение. Такое отношение называют универсальным отношением проектируемой БД. В одно универсальное отношение включаются все представляющие интерес атрибуты, и оно может содержать все данные, которые предполагается размещать в БД в будущем. При проектировании некоторых БД универсальное отношение может использоваться в качестве отправной точки.
ФИО студента |
Семестр |
Дисциплина |
Форма отчетности |
Оценка |
Кол-во часов |
ФИО преподавателя |
Иванов В. П. |
1 |
Английский язык |
зачет |
1 |
60 |
Цветкова А.Ю. |
Иванов В. П. |
1 |
Математический анализ |
зачет |
1 |
28 |
Рыбин К.К. |
Иванов В. П. |
1 |
Математический анализ |
экзамен |
5 |
32 |
Раков И.И. |
Иванов В. П. |
1 |
Программирование |
зачет |
1 |
36 |
Незабудкина З.П. |
Иванов В. П. |
1 |
Программирование |
экзамен |
5 |
32 |
Зайчиков А.А. |
Иванов В. П. |
1 |
Линейная алгебра |
зачет |
1 |
24 |
Волков Г.И. |
Иванов В. П. |
1 |
Линейная алгебра |
экзамен |
4 |
28 |
Волков Г.И. |
Иванов В. П. |
1 |
История Отечества |
экзамен |
5 |
24 |
Москвин А.П. |
Петрова А. П. |
1 |
Английский язык |
Зачет |
1 |
60 |
Цветкова А.Ю. |
Петрова А. П. |
1 |
Математический анализ |
Зачет |
1 |
28 |
Рыбин К.К. |
Петрова А. П. |
1 |
Математический анализ |
экзамен |
3 |
32 |
Раков И.И. |
Петрова А. П. |
1 |
Программирование |
Зачет |
1 |
36 |
Незабудкина З.П. |
Петрова А. П. |
1 |
Программирование |
экзамен |
4 |
32 |
Зайчиков А.А. |
Петрова А. П. |
1 |
Линейная алгебра |
Зачет |
1 |
24 |
Волков Г.И. |
Петрова А. П. |
1 |
Линейная алгебра |
экзамен |
4 |
28 |
Волков Г.И. |
Петрова А. П. |
1 |
История Отечества |
экзамен |
5 |
24 |
Москвин А.П. |
Сидоров К. К. |
3 |
Английский язык |
Зачет |
1 |
60 |
Цветкова А.Ю. |
Сидоров К. К. |
3 |
Математический анализ |
Зачет |
1 |
20 |
Карпов К.Ю. |
Сидоров К. К. |
3 |
Математический анализ |
экзамен |
5 |
28 |
Раков И.И. |
Сидоров К. К. |
3 |
Алгоритмы и структуры данных |
экзамен |
5 |
32 |
Зайчиков А.А. |
Сидоров К. К. |
3 |
Теория вероятностей и мат. статистика |
экзамен |
4 |
32 |
Соболев И.Г. |
Сидоров К. К. |
3 |
Операционные системы, среды и оболочки |
зачет |
1 |
36 |
Незабудкина З.П. |
Сидоров К. К. |
3 |
Операционные системы, среды и оболочки |
экзамен |
4 |
32 |
Незабудкина З.П. |
Сидоров К. К. |
3 |
Экономическая теория |
зачет |
1 |
24 |
Лабиринтов Е.Н. |
Рис. 6.2. Универсальное отношение «Сессия»
Однако при использовании универсального отношения возникают, по крайней мере, две проблемы:
1. Избыточность данных. Значения столбцов таблицы многократно повторяются. Повторяются также и некоторые наборы значений столбцов, например, данные о дисциплине.
2. Потенциальная противоречивость. Если при вводе данных, например, количество часов для дисциплины «Английский язык», была допущена ошибка, то для ее исправления необходимо найти все строки, содержащие сведения об этой дисциплине, и во всех этих строках провести изменения. Более того, при заполнении такой таблицы могут быть использованы различные формы записи одного и того же значения – например: «Англ. язык» и «Английский язык»; «Мат. анализ» и «Математический анализ».
Решение этих проблем состоит в разделении данных и связей, т.е. в выделении в отдельные таблицы сведений о студентах, преподавателях, дисциплинах и результатах сдачи экзаменов (рис. 6.3).
Студенты Преподаватели Дисциплины
№ |
ФИО студента |
|
№ |
ФИО преподавателя |
|
№ |
Дисциплина |
1 |
Иванов В. П. |
|
1 |
Волков Г. И. |
|
1 |
Алгоритмы и структуры данных |
2 |
Петрова А. П. |
|
2 |
Зайчиков А. А. |
|
2 |
Английский язык |
3 |
Сидоров К. К. |
|
3 |
Карпов К. Ю. |
|
3 |
История Отечества |
|
|
|
4 |
Лабиринтов Е. Н. |
|
4 |
Линейная алгебра |
|
|
|
5 |
Москвин А. П. |
|
5 |
Математический анализ |
|
|
|
6 |
Незабудкина З. П. |
|
6 |
Операционные системы, среды и оболочки |
|
|
|
7 |
Раков И. И. |
|
7 |
Программирование |
|
|
|
8 |
Рыбин К. К. |
|
8 |
Теория вероятностей и мат. статистика |
|
|
|
9 |
Соболев И. Г. |
|
9 |
Экономическая теория |
|
|
|
10 |
Цветкова А. Ю. |
|
|
|
Учебный план Результаты сессии
№ |
Дисциплина |
Семестр |
Кол-во часов |
Форма отчетности |
Преподаватель |
|
Студент |
Учебный план |
Оценка |
1 |
2 |
1 |
60 |
зачет |
10 |
|
1 |
1 |
1 |
2 |
3 |
1 |
24 |
экзамен |
5 |
|
1 |
2 |
5 |
3 |
4 |
1 |
24 |
зачет |
1 |
|
1 |
3 |
1 |
4 |
4 |
1 |
28 |
экзамен |
1 |
|
1 |
4 |
4 |
5 |
5 |
1 |
28 |
зачет |
8 |
|
1 |
5 |
1 |
6 |
5 |
1 |
32 |
экзамен |
7 |
|
1 |
6 |
5 |
7 |
7 |
1 |
36 |
зачет |
6 |
|
1 |
7 |
1 |
8 |
7 |
1 |
32 |
экзамен |
2 |
|
1 |
8 |
5 |
9 |
2 |
3 |
60 |
зачет |
10 |
|
2 |
1 |
1 |
10 |
5 |
3 |
20 |
зачет |
3 |
|
2 |
2 |
5 |
11 |
5 |
3 |
28 |
экзамен |
7 |
|
2 |
3 |
1 |
12 |
1 |
3 |
32 |
экзамен |
2 |
|
2 |
4 |
4 |
13 |
8 |
3 |
32 |
экзамен |
9 |
|
2 |
5 |
1 |
14 |
6 |
3 |
36 |
зачет |
6 |
|
2 |
6 |
3 |
15 |
6 |
3 |
32 |
экзамен |
6 |
|
2 |
7 |
1 |
16 |
9 |
3 |
24 |
зачет |
4 |
|
2 |
8 |
4 |
Рис. 6.3. Разделение универсального отношения «Сессия»
Заменим в таблицах «Результаты сессии» и «Учебный план» конкретные значения на их номера в других таблицах и получим, помимо значительного упрощения процедуры модификации текстовых значений, дополнительные возможности по включению строк в таблицы «Студенты», «Преподаватели», «Дисциплины», что значительно расширяет возможности БД.
Теперь при изменении названия «Математический анализ» на «Мат. анализ» исправляется единственное значение в таблице «Дисциплины». И даже если оно вводится с ошибкой, то это не может повлиять на связь между дисциплиной, преподавателем и студентом (в связующей таблице «Результаты сессии» используются номера дисциплин учебного плана, а не их названия).
Назад к разделу "Глава 6. Проектирование реляционной базы данных"
Вперед к разделу "6.2. Функциональная и многозначная зависимости"