Лекция 4. Нормализация

Реляционная база данных представляет собой некоторое множество таблиц, связанных между собой. Число таблиц в одном файле или одной базе данных зависит от многих факторов, основными из которых являются:

• состав пользователей базы данных,

• обеспечение целостности информации (особенно важно в многопользовательских информационных системах),

• обеспечение наименьшего объем требуемой памяти и минимального времени обработки данных.

 

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

Нормализация таблиц представляет собой способы разделения одной таблицы базы данных на несколько таблиц, в целом отвечающих перечисленным выше требованиям.

Нормализация таблицы представляет собой последовательное изменение структуры таблицы до тех пор, пока она не будет удовлетворять требованиям последней формы нормализации. Всего существует шесть форм нормализации:

• первая нормальная форма (First Normal Form — INF);

• вторая нормальная форма (Second Normal Form — 2NF);

• третья нормальная форма (Third Normal Form — 3NF);

• нормальная форма Бойса—Кодда (Brice—Codd Normal Form —

BCNF);

• четвертая нормальная форма (Fourth Normal Form — 4NF);

• пятая нормальная форма, или нормальная форма проекции-

соединения (Fifth Normal Form — 5NF, или PJ/NF).

 

На практике используется нормализация таблиц до третьей нормальной формы.

 

При описании нормальных форм используются следующие понятия: «функциональная зависимость между полями»; «полная функциональная зависимость между полями»; «многозначная функциональная зависимость между полями»; «транзитивная функциональная зависимость между полями»; «взаимная независимость между полями».

Функциональной зависимостью между полями А и В называется зависимость, при которой каждому значению А в любой момент времени соответствует единственное значение В из всех возможных. Примером функциональной зависимости может служить связь между идентификационным номером налогоплательщика и номером его паспорта.

Полной функциональной зависимостью между составным полем А и полем В называется зависимость, при которой поле В зависит функционально от поля А и не зависит функционально от любого подмножества поля А.

Многозначная функциональная зависимость между полями определяется следующим образом. Поле А многозначно определяет поле В, если для каждого значения поля А существует «хорошо определенное множество» соответствующих значений поля В. Например, если рассматривать таблицу успеваемости учащихся в школе, включающую в себя поля «Предмет» (поле А) и «Оценка» (поле В), то поле В имеет «хорошо определенное множество» допустимых значений: 1, 2, 3, 4, 5, т.е. для каждого значения поля «Предмет» существует многозначное «хорошо определенное множество» значений поля «Оценка».

Транзитивная функциональная зависимость между полями А и С существует в том случае, если поле С функционально зависит от поля В, а поле В функционально зависит от поля А; при этом не существует функциональной зависимости поля А от поля В.

Взаимная независимость между полями определяется следующим образом. Несколько полей взаимно независимы, если ни одно из них не является функционально зависимым от другого.

 

Первая нормальная форма. Таблица находится в первой нормальной форме тогда и только тогда, когда ни одно из полей не содержит более одного значения и любое ключевое поле не пусто.

Первая нормальная форма является основой реляционной модели данных. Любая таблица в реляционной базе данных автоматически находится в первой нормальной форме, иное просто невозможно по определению. В такой таблице не должно содержаться полей (признаков), которые можно было бы разделить на несколько полей (признаков).

 

Рисунок 4.1

Рисунок 4.2

Вторая нормальная форма. Таблица находится во второй нормальной форме, если она удовлетворяет требованиям первой нормальной формы и все ее поля, не входящие в первичный ключ, связаны полной функциональной зависимостью с первичным ключом.

Если таблица имеет простой первичный ключ, состоящий только из одного поля, то она автоматически находится во второй нормальной форме.

Если же первичный ключ составной, то таблица необязательно находится во второй нормальной форме. Тогда ее необходимо разделить на две или более таблиц таким образом, чтобы первичный ключ однозначно идентифицировал значение в любом поле.

Если в таблице имеется хотя бы одно поле, не зависящее от первичного ключа, то в первичный ключ необходимо включить дополнительные колонки. Если таких колонок нет, то необходимо добавить новую колонку.

 

Рисунок 4.3 – Исходные таблицы зачетно-экзаменационной ведомости

 

Исходя из данных условий, определяющих вторую нормальную форму, можно сделать следующие выводы по характеристике составленных таблиц (см. рис. 4.3).

В первой таблице нет прямой связи между ключевым полем и полем «ФИО преподавателя», поскольку зачет или экзамен по одному предмету могут принимать разные преподаватели. В таблице существует полная функциональная зависимость только между всеми остальными полями и ключевым полем «Дисциплина».

Аналогично во второй таблице нет прямой связи между ключевым полем и полем «ФИО преподавателя».

Для оптимизации базы данных, в частности для уменьшения требуемого объема памяти из-за необходимости повторения в каждой записи значений полей «Дисциплина» и «ФИО преподавателя», необходимо изменить структуру базы данных — преобразовать исходные таблицы во вторую нормальную форму.

Состав таблиц измененной структуры базы данных показан на рис. 4.4.

Рисунок 4.4 – Таблицы зачетно-экзаменационной ведомости,