Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
метода к типовому v.3_.doc
Скачиваний:
5
Добавлен:
11.11.2019
Размер:
2.18 Mб
Скачать

3.2.2Нормализация базы данных методом декомпозиции.

Функциональные зависимости универсального отношения, первичный ключ универсального отношения, диаграмма универсального отношения,

Универсальное отношение: R(КодПреп, ФИОПреп, КодДолж, УчСт, НазвДолж, КодДисц, НазвДисц, КодВидЗан, НазвВидЗан, КодСтуд, ФИОСтуд, НомГруппы, КодСпец, Семестр, Колво, НомерВидЗан, Оценка)

Атрибуты нашего универсального отношения находятся в следующих функциональных зависимостях:

КодПреп  ФИОПреп

КодПреп  КодДолж

КодПреп  УчСт

КодДолж  НазвДолж

КодДисц  НазвДисц

КодВидЗан  НазвВидЗан

КодСтуд  ФИОСтуд

КодСтуд  НомГруппы

НомГруппы  КодСпец

КодДисц, КодВидЗан, Семестр  Колво

КодСтуд, КодДисц, КодВидЗан, НомерВидЗан   Оценка

И еще есть один составной атрибут КодДисц, КодВидЗан, КодГруппы, Семестр, КодПреп, необходимый для того, что бы знать, какой преподаватель у какой группы ведет какие занятия.

Первичный ключ универсального отношения: КодСтуд, КодДисц, КодВидЗан, НомерВидЗан, НомГруппы, КодПреп, Семестр (выделен подчеркиванием).

Диаграмма функциональных зависимостей представлена на рис. 3.7.

Рис.3.7

Пошаговый процесс нормализации с подробным описанием каждого шага.

При нормализации методом декомпозиции важно не потерять функциональные зависимости. Чтобы этого не произошло при выборе очередной причинной функциональной зависимости, нужно руководствоваться следующим принципом: выбирать причинную функциональную зависимость так, чтобы ее зависимая часть не была детерминантом в какой-либо другой функциональной зависимости. Проще говоря, диаграмму надо раскручивать с концов. Например, в нашем случае, нельзя выбирать ФЗ КодПреп  КодДолж перед ФЗ КодДолж  НазвДолж, поскольку у первой зависимая часть (КодДолж) сама является детерминантом.

Шаг 1. Рассмотрим ФЗ КодПреп ® КодДолж, КодДолж ® НазвДолж универсального отношения. Атрибут НазвДолж транзитивно зависит от детерминанта КодПреп, что не удовлетворяет требованиям 3НФ. Выделим ФЗ КодДолж ® НазвДолж в отдельное отношение Должности, ключом в котором будет детерминант КодДолж; в универсальном отношении исключим атрибут НазвДолж и оставим атрибут КодДолж. Получим отношения:

Должности(КодДолж, НазвДолж)

R(КодПреп, ФИОПреп, КодДолж, УчСт, КодДисц, НазвДисц, КодВидЗан, НазвВидЗан, КодСтуд, ФИОСтуд, НомГруппы, КодСпец, Семестр, Колво, НомерВидЗан, Оценка)

Шаг 2. Отношение Должности находится в НФБК, продолжаем нормализовывать универсальное отношение. Рассмотрим функциональные зависимости КодПреп  ФИОПреп, КодПреп  КодДолж, КодПреп  УчСт. Из них видно, что атрибуты ФИОПреп, КодДолж, УчСт зависят не от всего первичного ключа (КодСтуд, КодДисц, КодВидЗан, НомерВидЗан, НомГруппы, КодПреп), а от его части (КодПреп), что не удовлетворяет требованиям второй нормальной формы. Выделим отношение Преподаватели. По правилу нормализации до 2НФ в него войдут атрибуты КодПреп, ФИОПреп, КодДолж, УчСт, ключом будет детерминант КодПреп. В универсальном отношении исчезнут атрибуты ФИОПреп, КодДолж, УчСт, детерминант КодПреп останется в составе первичного ключа, так как он входит в состав детерминанта КодДисц, КодВидЗан, КодГруппы, КодПреп. Таким образом получим следующие отношения:

Преподаватели(КодПреп, ФИОПреп, КодДолж, УчСт)

R(КодПреп, КодДисц, НазвДисц, КодВидЗан, НазвВидЗан, КодСтуд, ФИОСтуд, НомГруппы, КодСпец, Семестр, Колво, НомерВидЗан, Оценка)

После первых двух шагов диаграмма функциональных зависимостей будет как на рис. 3.8.

Рис.3.8

Шаг 3. Отношение Преподаватели находится в НФБК, нормализовываем универсальное отношение. Рассмотрим функциональные зависимости НомГруппы  КодСпец, КодДисц  НазвДисц, КодВидЗан  НазвВидЗан. В каждой из них зависимые части зависят только от части первичного ключа, что не удовлетворяет требованиям 2НФ. Выделим их в отдельные отношения аналогично шагу 2 (внимание, в универсальном отношении первичный ключ не изменил состав), получим отношения:

Группы(НомГруппы, КодСпец)

Дисциплины(КодДисц, НазвДисц)

ВидыЗанятий(КодВидЗан, НазвВидЗан)

R(КодПреп, КодДисц, КодВидЗан, КодСтуд, ФИОСтуд, НомГруппы, Семестр, Колво, НомерВидЗан, Оценка)

Диаграмма функциональных зависимостей после этого шага показана на рис. 3.9.

Рис.3.9

Шаг 4. Отношения Группы, Дисциплины, ВидыЗанятий находятся в НФБК, по-прежнему продолжаем рассматривать то, что осталось от универсального отношения. Обратите внимание, на предыдущем шаге мы не рассматривали причинные ФЗ КодСтуд  НомГруппы и КодСтуд  ФИОСтуд. Так мы поступили потому, что на тот момент в универсальном отношении зависимая часть ФЗ КодСтуд  НомГруппы сама являлась детерминантом в ФЗ НомГруппы  КодСпец. Теперь атрибут НомГруппы сам по себе не является детерминантом (он входит в составной детерминант), поэтому на этом шаге нормализуем универсальное отношение, выделив из него причинные ФЗ КодСтуд  НомГруппы и КодСтуд  ФИОСтуд. Получим отношения:

Студенты(КодСтуд, ФИОСтуд, НомГруппы)

R(КодПреп, КодДисц, КодВидЗан, КодСтуд, НомГруппы, Семестр, Колво, НомерВидЗан, Оценка)

Диаграмма ФЗ универсального отношения после нормализации на этом шаге показана на рис. 3.10 (на рис. показано только универсальное отношение и не показаны ранее выделенные отношения).

Рис.3.10

Обратите внимание, что атрибут НомГруппы остался в составе универсального отношения, так как он входит в состав первичного ключа этого отношения и его нельзя удалять. Однако, ФЗ КодСтуд  НомГруппы удалена из универсального отношения.

Шаг 5. Отношение Студенты находится в НФБК, продолжим нормализовывать универсальное отношение. Рассмотрим ФЗ КодДисц, КодВидЗан, Семестр  Колво. Зависимая часть этой функциональной зависимости зависит только от части первичного ключа, что не удовлетворяет требованиям 2НФ. Выделим эту ФЗ в отдельное отношение, в составе универсального отношения останется часть детерминанта: КодДисц, КодВидЗан, атрибут можно исключить из универсального. Получим отношения:

ВидыЗанятийДисциплины(КодДисц, КодВидЗан, Семестр, Колво)

R(КодПреп, КодДисц, КодВидЗан, КодСтуд, НомГруппы, НомерВидЗан, Оценка)

Обратите внимание, что в отношении ВидыЗанятийДисциплины в состав первичного ключа недостаточно включить атрибуты КодДисц, КодВидЗан, необходим еще атрибут Семестр. Почему? Например, дисциплина Высшая математика (КодДисц=7) преподается три семестра, количество домашних работ (КодВидЗан=2) в каждом семестре приведено в таблице 3.2.

Таблица 3.2. Некоторые кортежи отношения ВидыЗанятийДисциплины

КодДисц

КодВидЗан

Семестр

Колво

1

1

1

6

1

1

2

7

1

1

3

4

Посмотрите, группа атрибутов КодДисц, КодВидЗан не является первичным ключом отношения ВидыЗанятийДисциплины, поскольку по этой группе мы не может уникально идентифицировать каждый кортеж отношения, например, по паре 7;2 найдется сразу три кортежа, а не один. Поэтому для определения количества домашних работ по высшей математике в отношении ВидыЗанятийДисциплины должен быть первичный ключ, состоящий из трех атрибутов КодДисц, КодВидЗан, Семестр.

Диаграмма функциональных зависимостей универсального отношения после нормализации на этом шаге показана на рис. 3.11.

Рис.3.11

Шаг 6. Отношение ВидыЗанятийДисциплины находится в НФБК. В универсальном отношении осталась одна ФЗ КодСтуд, КодДисц, КодВидЗан, НомерВидЗан  Оценка, благодаря которой отношение не находится во 2НФ. Выделим эту ФЗ в отдельное отношение, получим отношения:

Оценки(КодДисц, КодВидЗан, КодСтуд, НомерВидЗан, Семестр, Оценка)

R(КодПреп, КодДисц, КодВидЗан, КодСтуд, НомГруппы, Семестр, НомерВидЗан)

Последние отношения находятся в НФБК. Процедура декомпозиции окончена. В ходе нормализации получили следующие отношения:

Должности(КодДолж, НазвДолж)

Преподаватели(КодПреп, ФИОПреп, КодДолж, УчСт)

Группы(НомГруппы, КодСпец)

Дисциплины(КодДисц, НазвДисц)

ВидыЗанятий(КодВидЗан, НазвВидЗан)

Студенты(КодСтуд, ФИОСтуд, НомГруппы)

ВидыЗанятийДисциплины(КодДисц, КодВидЗан, Семестр, Колво)

Оценки(КодДисц, КодВидЗан, КодСтуд, НомерВидЗан, Семестр, Оценка)

R(КодПреп, КодДисц, КодВидЗан, КодСтуд, НомГруппы, Семестр, НомерВидЗан)

Теперь разберемся с отношением R(КодПреп, КодДисц, КодВидЗан, КодСтуд, НомГруппы, Семестр, НомерВидЗан). Обычно то, что осталось от универсального отношения после нормализации, неинформативно, то есть из атрибутов (и/или группы атрибутов) универсального отношения невозможно получить информацию, которую нельзя было бы получить из других отношений. В этом случае универсальное отношение просто удаляется из списка полученных в результате нормализации отношений. Если некоторая группа атрибутов универсального отношения несет в себе какую-либо информацию, которую невозможно получить из других отношений, ее оставляют в отношении (все остальные атрибуты удаляются), универсальное отношение переименовывают. В нашем случае есть такая группа атрибутов – это КодДисц, КодВидЗан, КодГруппы, КодПреп. Итак, в конечном итоге получили следующие отношения:

Должности(КодДолж, НазвДолж)

Преподаватели(КодПреп, ФИОПреп, КодДолж, УчСт)

Группы(НомГруппы, КодСпец)

Дисциплины(КодДисц, НазвДисц)

ВидыЗанятий(КодВидЗан, НазвВидЗан)

Студенты(КодСтуд, ФИОСтуд, НомГруппы)

ВидыЗанятийДисциплины(КодДисц, КодВидЗан, Семестр, Колво)

Оценки(КодДисц, КодВидЗан, КодСтуд, НомерВидЗан, Семестр, Оценка)

КтоУКогоЧтоВедет(КодПреп, КодДисц, КодВидЗан, НомГруппы, Семестр)

Окончательная диаграмма функциональных зависимостей приведена на рис. 3.12.

Рис. 3.12

Сводная таблица отношений и атрибутов нормализованной базы данных с указанием ключей отношений.

Занесем отношения и их атрибуты в сводную таблицу 3.3. Таблица такой формы удобна при дальнейшем проектировании и разработке приложения базы данных.

Таблица 3.3

Сводная таблица атрибутов и отношений базы данных Учет оценок студентов после нормализации методом декомпозиции

Отношение

Имя атрибута

Описание

Должности

КодДолж

Должность преподавателя

НазвДолж

Наименование должности преподавателя

Преподаватели

КодПреп

Уникальный код преподавателя

ФИОПреп

Фамилия, Имя, Отчество преподавателя

КодДолж

Должность преподавателя

УчСт

Ученая степень преподавателя

Группы

НомГруппы

Номер группы

КодСпец

Код специальности по классификатору

Дисциплины

КодДисц

Уникальный код дисциплины

НазвДисц

Наименование дисциплины

ВидыЗанятий

КодВидЗан

Уникальный код вида занятия

НазвВидЗан

Наименование вида занятия

Студенты

КодСтуд

Номер зачетной книжки студента

ФИОСтуд

Фамилия, Имя, Отчество студента

НомГруппы

Номер группы, в которой обучается студент

ВидыЗанятийДисциплины

КодДисц

Уникальный код дисциплины

КодВидЗан

Уникальный код вида занятия

Семестр

Номер семестра

Колво

Количество вида занятия определенной дисциплины за определенный семестр

Оценки

КодСтуд

Номер зачетной книжки студента

КодДисц

Уникальный код дисциплины

КодВидЗан

Уникальный код вида занятия

НомерВидЗан

Номер определенного вида занятия, по которому студент получил оценку

Семестр

Номер семестра

Оценка

Значение оценки

КтоУКогоЧтоВедет

КодДисц

Уникальный код дисциплины

КодПреп

Уникальный код преподавателя

КодВидЗан

Уникальный код вида занятия

НомГруппы

Название группы

Семестр

Номер семестра