Лекции № 8-9.
Функциональная зависимость. Нормальные формы.
Цель занятия: познакомить студентов с определением функциональной зависимости атрибутов, с понятием нормализации исходного отношения, рассказать о причинах, приводящих к необходимости нормализации файлов записи, ввести способы обеспечения требуемого уровня нормальности таблицы, определить нормальные формы на конкретном примере.
Теория нормализации, как и теория баз данных в целом, опирается на математический аппарат, основу которого составляют теория множеств и элементы алгебры.
Одни и те же данные могут группироваться в таблицы (отношения) различными способами. Группировка атрибутов в отношениях должна быть рациональной (т. е. дублирование данных д.б. минимальным) и упрощающей процедуры их обработки и обновления. Устранение избыточности данных является одной из важнейших задач проектирования баз данных и обеспечивается нормализацией.
Нормализация таблиц (отношений) — это формальный аппарат ограничений на формирование таблиц (отношений), который позволяет устранить дублирование, обеспечивает непротиворечивость хранимых в базе данных, уменьшает трудозатраты на ведение (ввод, корректировку) базы данных. Процесс нормализации заключается в разложении (декомпозиции) исходных отношений БД на более простые отношения. Каждая ступень этого процесса приводит схему отношений в последовательные нормальные формы. Для каждой ступени нормализации имеются наборы ограничений, которым должны удовлетворять отношения БД. Нормализация позволяет удалить из таблиц базы избыточную неключевую информацию.
Вначале вспомним некоторые понятия:
Простой атрибут — это атрибут, значения которого неделимы. Иными словами, в таблице нет полей типа ФИО или Адрес — они разложены на поля Фамилия, Имя, Отчество в первом случае и на поля Индекс, Город и т. д. во втором.
Сложный (составной) атрибут получается путем соединения нескольких атомарных атрибутов, иначе его называют вектором или агрегатом данных.
Определение функциональной зависимости: Пусть X и Y атрибуты некоторого отношения. Если в любой момент времени произвольному значению X соответствует единственное значение Y, то Y функционально зависит от X (X → Y)
Если ключ является составным, то любой атрибут должен зависеть от ключа в целом, но не может находиться в функциональной зависимости от какой-либо части составного ключа, т.е. функциональная зависимость имеет вид (X1, X2,..., X) → Y.
Функциональная зависимость может быть полной или неполной.
Неполной зависимостью называется зависимость неключевого атрибута от части составного ключа.
Полной функциональной зависимостью называется зависимость неключевого атрибута от всего составного ключа, а не от его частей.
Определение транзитивной функциональной зависимости: Пусть X, Y, Z — три атрибута некоторого отношения. При эtom X → Y и Y → Z, но обратное соответствие отсутствует, то есть Y не зависит от Z, а Х не зависит от Y. Тогда говорят, что Z транзитивно зависит от Х.
Определение многозначной зависимости: Пусть Х и Y атрибуты некоторого отношения. Атрибут Y многозначно зависит от атрибута X, если. каждому значению X соответствует множество значений Y, не связанных с другими атрибутами из отношения. Многозначные зависимости могут носить характер «один ко многим» (1:М), «многие к одному» (М:1) или «многие ко многим» (М:М), обозначаемые соответственно: X=>Y, Y<=X и X<=>Y. Например, преподаватель ведет несколько предметов, а каждый предмет может вестись несколькими преподавателями, тогда имеет место зависимость ФИО <=> Предмет.
Рассмотрим следующий пример: Предположим, что для учебной части факультета создается БД о преподавателях, которая включает следующие атрибуты:
ФИО - фамилия и инициалы преподавателя (совпадения фамилий и инициалов исключаются).
Должность - должность, занимаемая преподавателем.
Оклад- оклад преподавателя.
Стаж - преподавательский стаж. Д_Стаж - надбавка за стаж.
Кафедра - номер кафедры, на которой числится преподаватель.
Предмет - название предмета (дисциплины), читаемого преподавателем.
Группа - номер группы, в которой преподаватель проводит занятия.
Вид занятия - вид занятий, проводимых преподавателем в учебной группе.
Исходное отношение ПРЕПОДАВАТЕЛЬ
ФИО | Должность | Оклад | Стаж | Д_Стаж | Кафедра | Предмет | Группа | Вид занятия |
Иванов И. М. | Преподаватель | БД | АС-21 | Практика | ||||
Иванов И. М. | Преподаватель | ОС | АС-22 | Практика | ||||
Петров М. И. | Ст. преподаватель | БД | АС-21 | Лекция | ||||
Петров М. И. | Ст. преподаватель | Архитектура | АС-21 | Практика | ||||
Сидоров Н. Г. | Преподаватель | ОС | АС-22 | Лекция | ||||
Сидоров Н. Г. | Преподаватель | Архитектура | АС-21 | Лекция | ||||
Егоров В. В. | Преподаватель | Философия | ПС-22 | Лекция |
Итак, выделим в нашем отношении все виды зависимостей: функциональные (полные и неполные), многозначные, транзитивные. Выявление зависимостей между атрибутами необходимо для приведения данных к нормальным формам, т.е. нормализации данных.
Ф ункциональные зависимости: ФИО→Кафедра, ФИО→Должность, Должность→ Оклад, ФИО→Предмет.
Также в нашем отношении ключ является составным и состоит из атрибутов (ФИО, Предмет, Группа).
Неполная функциональная зависимость: (ФИО, Предмет, Группа)→Должность, т.к. атрибут Должность находится в функциональной зависимости от атрибута ФИО, являющегося частью ключа.
Полная функциональная зависимость: (ФИО, Предмет, Группа)→Вид занятия.
Транзитивная зависимость: ФИО→Должность→Оклад, ФИО→Стаж→Д_Стаж.
Таким образом, выявились следующие зависимости, в основе выделения которых лежало условие, что один преподаватель в одной группе может проводить только один вид занятий (лекции или практические занятия):
ФИО →Должность ФИО →Оклад ФИО →Стаж ФИО →Д_Стаж ФИО →Кафедра | Стаж →ДСтаж Оклад →Должность Должность →Оклад (ФИО, Предмет, Группа) →Вид занятий |
К выделению этих функциональных зависимостей приводят следующие соображения.
Фамилия, Имя и Отчество у преподавателей факультета уникальны. Каждому преподавателю однозначно соответствует его стаж, т. е. имеет место функциональная зависимость ФИО →Стаж. Обратное утверждение неверно, так как одинаковый стаж может быть у разных преподавателей.
Каждый преподаватель имеет определенную добавку за стаж, т. е. имеет место функциональная зависимость ФИО→Д_Стаж, но обратная функциональная зависимость отсутствует, так как одну и ту же надбавку могут иметь несколько преподавателей.
Каждый преподаватель имеет определенную должность (преп., ст. преп., доцент, профессор), но одну и ту же должность могут иметь несколько преподавателей, т.е. имеет место функциональная зависимость ФИО→Должность, а обратная функциональная зависимость отсутствует.
Каждый преподаватель является сотрудником одной и только одной кафедры. Поэтому имеет место функциональная зависимость ФИО→Кафедра. С другой стороны, на каждой кафедре много преподавателей, поэтому обратной функциональной зависимости нет.
Каждому преподавателю соответствует конкретный оклад, который одинаков для всех педагогов с одинаковыми должностями, что учитывается зависимостями ФИО→Оклад и Должность→Оклад. Нет одинаковых окладов для разных должностей, поэтому имеет место функциональная зависимость Оклад→Должность.
Один и тот же преподаватель в одной группе по разным предметам может проводить разные виды занятий. Определение вида занятий, которые проводит преподаватель, невозможно без указания предмета и группы, поэтому имеет место функциональная зависимость (ФИО, Предмет, Группа) →Вид Занятия.
Не были выделены зависимости между атрибутами ФИО, Предмет и Группа, поскольку они образуют составной ключ и не учитываются в процессе нормализации исходного отношения.
Далее рассмотрим процесс нормализации. Как было сказано выше, процесс проектирования БД с использованием метода нормальных форм заключается в последовательном переводе отношений из первой нормальной формы в нормальные формы более высокого порядка по определенным правилам.
Каждая следующая нормальная форма ограничивает определенный тип функциональных зависимостей, устраняет соответствующие аномалии при выполнении операций над отношениями БД и сохраняет свойства предшествующих нормальных форм. Выделяют следующую последовательность нормальных форм: первая нормальная форма (1НФ); вторая нормальная форма (2НФ); третья нормальная форма (ЗНФ).