
- •4 Основы проектирования баз данных
- •4.1 Основные цели и этапы проектирования баз данных
- •4.2 Подходы к проектированию и проблемы определения структур данных
- •4.2.1 Подходы к проектированию бд
- •4.2.2Избыточное дублирование данных
- •4.2.3 Аномалии обновления отношений
- •4.2.4 Формирование исходного отношения
- •4.3 Основы теории функциональных зависимостей
- •4.3.1 Общие положения и определение понятия функциональной зависимости данных
- •4.3.2 Виды функциональных зависимостей
- •4.3.3 Аксиомы Армстронга
- •4.4 Метод нормальных форм
- •4.4.1 Цели и порядок проведения нормализации отношений
- •4.4.2 Первая нормальная форма и основная операция нормализации
- •4.4.3 Вторая нормальная форма
- •4.4.4 Третья нормальная форма
- •4.4.5 Нормальная форма Бойса-Кодда
- •4.5 Рекомендации по разработке структур данных
4.4 Метод нормальных форм
4.4.1 Цели и порядок проведения нормализации отношений
БД, разработанная по правилам проектирования, должна быть нормализованной, т.е. удовлетворять определенным требованиям, обеспечивающим удобство ее хранения и обновления. Нормализация обеспечивает:
минимальную избыточность данных (все данные хранятся один раз);
минимальный физический объем данных;
ускорение доступа к данным;
сокращение риска потери данных или их искажения при внесении изменений в БД.
Процесс проектирования БД с использованием метода нормальных форм является итерационным и заключается в последовательном переводе отношений из первой нормальной формы в нормальные формы более высокогопорядка по определенным правилам. Каждая следующая нормальная форма ограничивает определенный тип функциональных зависимостей, устраняет соответствующие аномалии при выполнении операций над отношениями БД и сохраняет свойства предшествующих нормальных форм.
Выделяют следующую последовательность нормальных форм: первая нормальная форма (1НФ); вторая нормальная форма (2НФ);третья нормальная форма (ЗНФ); усиленная третья нормальная форма или нормальная форма Бойса-Кодда (БКНФ); четвертая нормальная форма (4НФ) и т.д. (5НФ, 6НФ, 7НФ и выше).
Примечание. Наряду с точным термином “нормализация отношений”, используются термины “нормализация баз данных”, “нормализация таблиц” или просто “нормализация”. Подробно теоретические основы проектирования БД рассматриваются, например, в [6, 24][5Хансен,6Дейт].
Итак, нормализация выполняется для каждой таблицы, входящей в БД. Выделяется несколько уровней нормализации, соответствующих указанным нормальным формам. Нормализация каждой таблицы выполняется поэтапно: сначала таблица приводится к первой нормальной форме, затем – ко второй, и т.д. На практике в большинстве случаев достаточным оказывается приведение к третьей нормальной форме (см. п. 4.4.4). Иногда требуется приведение к нормальной форме Бойса-Кодда (п. 4.4.5). Приведение к нормальным формам более высоких порядков (четвертая, пятая, шестая и т.д.) требуется редко.
Для выполнения проектирования БД методом нормальных форм необходимо выявление зависимостей между атрибутами. Как уже отмечалось, основной способ определения наличия функциональных зависимостей — внимательный анализ семантики атрибутов.
Выявим зависимости между атрибутами отношения ПРЕПОДАВАТЕЛЬ, приведенного на рис. 4.4. При этом учтем следующее условие, которое выполняется в данном отношении: один преподаватель в одной группе может проводить один вид занятий (лекции или практические занятия).
В результате анализа отношения получаем зависимости между атрибутами, показанные на рис. 4.5.
К выделению этих ФЗ для рассматриваемого примера приводят следующие соображения.
Рис. 4.5. Зависимости между атрибутами
Каждый преподаватель имеет определенную добавку за стаж, т. е. имеет место функциональная зависимость ФИО—>Д_Стаж, но обратная функциональная зависимость отсутствует, так как одну и ту же надбавку могут иметь несколько преподавателей.
Каждый преподаватель имеет определенную должность (преп., ст.преп. и т.д.), но одну и ту же должность могут иметь несколько преподавателей, т.е. имеет место функциональная зависимость ФИО—>Должн, а обратная функциональная зависимость отсутствует.
Каждый преподаватель является сотрудником одной и только одной кафедры. Поэтому функциональная зависимость ФИО—>Каф имеет место. С другой стороны, на каждой кафедре много преподавателей, поэтому обратной функциональной зависимости нет.
Каждому преподавателю соответствует конкретный оклад, одинаковый для всех педагогов с одинаковыми должностями, что учитывается зависимостями ФИО—>Оклад и Должн—>Оклад. В то же время имеет место функциональная зависимость Оклад—>Должн, т.к. нет одинаковых окладов для разных должностей.
Один и тот же преподаватель в одной группе по разным предметам может проводить разные виды занятий. Определение вида занятий, которые проводит преподаватель, невозможно без указания предмета и группы, поэтому имеет место зависимость ФИО,Предм,Группа—>ВидЗан.
Нами не были выделены зависимости между атрибутами ФИО, Предм и Группа, поскольку они образуют составной ключ и не учитываются в процессе нормализации исходного отношения.
После того, как выделены все функциональные зависимости, следует проверить их согласованность с данными исходного отношения ПРЕПОДАВАТЕЛЬ (рис. 4.4).
Например, Должн = 'преп' и Оклад=500 всегда соответствуют друг другу во всех кортежах, т. е. подтверждается функциональная зависимость Должн<—>Оклад. Так же следует верифицировать и остальные функциональные зависимости, не забывая об ограниченности имеющихся в отношении данных.