|
|
|
|
|
Таблица 4.1 |
|
|
|
«Расписание» |
|
|
|
|
Преподаватель |
День недели |
Номер пары |
Название |
Тип занятий |
|
Группа |
дисциплины |
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Петров В. И. |
Понед. |
1 |
Теор. выч. проц. |
Лекция |
|
4906 |
|
Вторник |
1 |
Комп. графика |
Лаб. раб. |
|
4907 |
|
Вторник |
2 |
Комп. графика |
Лаб. раб. |
|
4906 |
Киров В. А. |
Понед. |
2 |
Теор. информ. |
Лекция |
|
4906 |
|
Вторник |
3 |
Пр-е на С++ |
Лаб. раб. |
|
4907 |
|
Вторник |
4 |
Пр-е на С++ |
Лаб. раб. |
|
4906 |
Серов А. А. |
Понед. |
3 |
Защита информ. |
Лекция |
|
4944 |
|
Среда |
3 |
Пр-е на VB |
Лаб. раб. |
|
4942 |
|
Четверг |
4 |
Пр-е на VB |
Лаб. раб. |
|
4922 |
|
|
|
|
|
Таблица 4.2 |
|
|
|
«Расписание» |
|
|
|
|
Преподаватель |
День недели |
Номер пары |
Название |
Тип занятий |
|
Группа |
дисциплины |
|
|||||
|
|
|
|
|
|
|
Петров В. И. |
Понед. |
1 |
Теор. выч. проц. |
Лекция |
|
4906 |
Петров В. И. |
Вторник |
1 |
Комп. графика |
Лаб. раб. |
|
4907 |
Петров В. И. |
Вторник |
2 |
Комп. графика |
Лаб. раб. |
|
4906 |
Киров В. А. |
Понед. |
2 |
Теор. информ. |
Лекция |
|
4906 |
Киров В. А. |
Вторник |
3 |
Пр-е на С++ |
Лаб. раб. |
|
4907 |
Киров В. А. |
Вторник |
4 |
Пр-е на С++ |
Лаб. раб. |
|
4906 |
Серов А. А. |
Понед. |
3 |
Защита информ. |
Лекция |
|
4944 |
Серов А. А. |
Среда |
3 |
Пр-е на VB |
Лаб. раб. |
|
4942 |
Серов А. А. |
Четверг |
4 |
Пр-е на VB |
Лаб. раб. |
|
4922 |
101
Рассмотрим отношение, моделирующее сдачу студентами текущей сессии. Структура этого отношения определяется следующим набором атрибутов:
(ФИО. Номер зач. кн. Группа. Дисциплина. Оценка)
Так как каждый студент сдаст целый набор дисциплин в процессе сессии, то первичным ключом отношения может быть (Номер, зач.кн., Дисциплина), который однозначно определяет каждую стоку отношения. С другой стороны, атрибуты ФИО и Группа зависят только от части первичного ключа - от значения атрибута Номер зач. кн., поэтому мы должны констатировать наличие неполных функциональных зависимостей в данном отношении. Для приведения данного отношения ко второй нормальной форме следует разбить его на проекции, при этом должно быть соблюдено условие восстановления исходного отношении без потерь (рис. 4.4).
Такими проекциями могут быть два отношения
(ФИО. Номер. |
|
(Номер зач.кн.. |
зач.кн.. Группа) |
|
Дисциплина. |
|
|
Оценка) |
|
||
|
|
|
Рис. 4.4. Проекции из набора отношений
Этот набор отношений не содержит неполных функциональных зависимостей, и поэтому эти отношения находятся во второй нормальной форме.
А почему надо приводить отношения ко второй нормальной форме? Иначе говоря, какие аномалии или неудобства могут возникнуть, если мы оставим исходное отношение и не будем его разбивать на два? Давайте
102
рассмотрим ситуацию, когда студент переведен из одной группы в другую. Тогда в первом случае (если мы не разбивали исходное отношение на два) мы должны найти все записи с данным студентом и в них изменить значение атрибута Группа на новое. Во втором же случае меняется только один кортеж в первом отношении. И конечно, опасность нарушения корректности (непротиворечивости содержании) БД в первом случае выше. Может получиться так, что часть кортежей поменяет значение атрибута Группа, а часть по причине сбоя в работе аппаратуры останется в старом состоянии. И тогда наша БД будет содержать записи, которые относят одного студента одновременно к разным группам. Чтобы это не произошло, мы должны принимать дополнительные непростые меры, например, организовывать процесс согласованного изменения с использование сложного механизма транзакций, который мы будем рассматривать, в главах, посвященных вопросам распределенного доступа к БД. Если же мы перешли ко второй нормальной форме, то мы меняем только один кортеж. Кроме того, если у нас есть студенты, которые еще не сдавали экзамены, то в исходном отношении мы вообще не можем хранить о них информацию, а во второй схеме информация о студентах и их принадлежности к конкретной группе хранится отдельно от информации, которая связана со сдачей экзаменов, и поэтому мы можем в этом случае отдельно работать со студентами и отдельно хранить и обрабатывать информацию об успеваемости и сдаче экзаменов, что в действительности и происходит.
Отношение находится в третьей нормальной форме
тогда и только тогда, когда оно находится во второй нормальной форме и не содержит транзитивных зависимостей.
Рассмотрим отношение, связывающее студентов с группами, факультетами и специальностями, на которых он учится.
103
(ФИО. Номер зач.кн.. Группа, Факультет. Специальность. Выпускающая кафедра)
Первичным ключом отношения является Номер зач.кн., однако рассмотрим остальные функциональные зависимости. Группа, в которой учится студент, однозначно определяет факультет, на котором он учится, а также специальность выпускающую кафедру. Кроме того, выпускающая кафедра однозначно определяет факультет, на котором обучаются студенты, выпускаемые по данной кафедре. Но если мы предположим, что одну специальность могут выпускать несколько кафедр, то специальность не определяет выпускающую кафедру. В этом случае у нас есть следующие функциональные зависимости:
Номер зач.кн. -> ФИО Номер зач.кн. -> Группа Номер зач.кн. -> Факультет
Номер зач.кн. -> Специальность Номер зач.кн. -> Выпускающая кафедра/ Группа -> Факультет Группа -> Специальность
Группа -> Выпускающая кафедра Выпускающая кафедра -> Факультет
И эти зависимости образуют транзитивные группы. Для того чтобы избежать этого, мы можем предложить следующий набор отношений:
(Номер. зач.кн., ФИО. Специальность. Группа) (Группа. Выпускающая кафедра)
(Выпускающая кафедра. Факультет)
Первичные ключи отношений выделены.
Теперь необходимо удостовериться, что при естественном соединении мы не потеряем ни одной строки не
104
получим лишних кортежей. И это упражнение и предлагаю выполнить и самостоятельно.
Полученный набор отношений находится в третьей нормальной форме.
Oтношение находится в нормальной форме Бойса -
Кодда, если оно находится в третьей нормальном форме и каждый детерминант отношения является потенциальным ключом отношении.
Рассмотрим отношение, моделирующее сдачу студентом текущих экзаменов. Предположим, что студент может сдавать экзамен по одной дисциплине несколько раз, если он получил удовлетворительную оценку. Допустим, что во избежание возможных полных однофамильцев мы можем однозначно идентифицировать студента номером его зачетной книги, но, с другой стороны, у нас ведется электронный учет текущей успеваемости студентов, поэтому каждому студенту присваивается в период его обучения в вузе уникальный номеридентификатор. Отношение, которое моделирует сдачу текущей сессии, имеет следующую структуру:
(Номер зач.кн.. Иденфикатор_студента. Дисциплина. Дата, Оценка)
Потенциальными ключами отношения являются Номер_зач.кн, Дисциплина, Дата и Идентификатор_студента, Дисциплина, Дата.
Какие функциональные зависимости у нас имеются?
Номер_зач.кн. Дисциплина. Дата -> Оценка; Идентификатор_студента. Дисциплина. Дата -> Оценка; Номер зач.кн. -> Идентификатор_студента; Идентификатор_студента; -> Номер зач.кн.
105