Процесс нормализации таблиц

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

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

Табельный № рабочего фамилия Специальность Табельный № менеджера № объекта
  Иванов Электрик   {1, 2}
  Петров Плотник   {1,3,4,5}
  Сидоров Электрик    

Рис. 15. Реляционная таблица РАБОТНИК, не отвечающая первой нормальной форме.

Реляционная таблица на рис. 15 спроектирована неудачно. Например, в четырех записях, соответствующих рабочему с табельным номером 1235, повторяется одно и то же имя и информация о специальности. Эта избыточность данных приводит не только к увеличению объема требуемой памяти компьютера, но может вызвать и нарушение целостности данных в базе данных.

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

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

Теперь предположим, что Петров длительное время был на больничном и все объекты были завершены. Принято решение удалить все записи таблицы, связанные с завершенными объектами. В этом случае информация о Петрове будет потеряна полностью. Это называется аномалией удаления. Рассмотрим обратный случай. Принят новый работник. Этот работник еще не получил назначения ни на один из объектов. Если пустые значения не допускаются в базе данных, то нельзя ввести информацию о новом работнике. Это называется аномалией ввода.

Чтобы избежать аномалий обновления, удаления и ввода, необходимо применить к таблице метод, называемый разбиением. Разбиение – это процесс разделения таблицы на несколько таблиц в целях избавления от аномалий и поддержания целостности данных.

ПЕРВАЯ НОРМАЛЬНАЯ ФОРМА. Реляционная таблица находится в первой нормальной форме (1НФ), если значения в таблице являются атомарными для каждого атрибута таблицы. Под этим подразумевается, что никакое значение атрибута не может быть множеством значений или повторяющейся группой.

На рис. 17 приведен пример таблицы, не соответствующей 1НФ, так как значения № объекта не являются атомарными. Однако таблица, представленная на рис. 16, имеет 1НФ.

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

ФУНКЦИОНАЛЬНЫЕ ЗАВИСИМОСТИ. Функциональные зависимости (ФЗ) позволяют накладывать дополнительные ограничения на реляционную схему. Основная идея состоит в том, что значение одного атрибута в кортеже однозначно определяет значение другого атрибута. Например, в таблице РАБОТНИК атрибуты ТАБЕЛЬНЫЙ НОМЕР однозначно определяют значение атрибутов СПЕЦИАЛЬНОСТЬ и ФИМИЛИЯ. Это можно записать следующим образом:

ТАБЕЛЬНЫЙ НОМЕР -> ФАМИЛИЯ

ТАБЕЛЬНЫЙ НОМЕР -> СПЕЦИАЛЬНОСТЬ

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

ВТОРАЯ НОРМАЛЬНАЯ ФОРМА. Реляционная таблица находится во второй нормальной форме (2НФ), если никакие неключевые атрибуты не являются функционально зависимыми лишь от части ключа. Следовательно, 2НФ может быть нарушена только в том случае, если ключ составной, то есть ключом является набор из нескольких атрибутов. В качестве примера рассмотрим таблицу РАБОТНИК (ТАБЕЛЬНЫЙ НОМЕР, НОМЕР ОБЪЕКТА, ДАТА НАЧАЛА РАБОТЫ, ФАМИЛИЯ). В этой таблице ключ состоит из атрибутов ТАБЕЛЬНЫЙ НОМЕР и НОМЕР ОБЪЕКТА. При этом фамилия определяется атрибутом ТАБЕЛЬНЫЙ НОМЕР, то есть функционально зависит от части ключа. Эта таблица не удовлетворяет 2НФ. Если таблицу оставить в таком виде, то могут возникнуть следующие проблемы:

· Имя работника повторяется в каждой строке, относящейся к назначению этого работника.

· Если имя работника изменяется, то требуется обновить все строки, содержание информацию о назначениях этого работника.

· Из-за избыточности может возникнуть несоответствие данных, когда в разных строках содержатся разные фамилии для одного и того же работника.

· Если в какой-то момент времени работник не имеет назначений, то может отсутствовать строка, в которой хранится фамилий работника.

Для решения этих проблем таблицу необходимо разбить на две реляционные таблицы, каждая из которых удовлетворяет 2НФ:

НАЗНАЧЕНИЕ (ТАБЕЛЬНЫЙ НОМЕР, НОМЕР ОБЪЕКТА, ДАТА НАЧАЛА РАБОТЫ);

РАБОТНИК (ТАБЕЛЬНЫЙ НОМЕР, ФАМИЛИЯ).

Внешним ключом является ТАБЕЛЬНЫЙ НОМЕР.

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

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

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

1. В исходной таблице выявляются атрибуты, зависящие от части ключа. Создается новая таблица, атрибутами которой будут атрибуты исходной таблицы, входящие в противоречащую правилу ФЗ. Детерминант ФЗ становится ключом новой таблицы.

2. Атрибут, стоящий в правой части ФЗ, исключается из исходной таблицы

3. Если более одной ФЗ нарушают 2НФ, то шаги 1 и 2 повторяются для каждой такой ФЗ.

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

ТРЕТЬЯ НОРМАЛЬНАЯ ФОРМА. Реляционная таблица имеет третью нормальную форму (3НФ), если для любой функциональной зависимости X->Y X является ключом. Из определения следует, что любая таблица, удовлетворяющая 3НФ, также удовлетворяет и 2НФ.

Рассмотрим таблицу РАБОТНИК (ТАБЕЛЬНЫЙ НОМЕР, СПЕЦИАЛЬНОСТЬ, ПРЕМИЯ). Полагаем, что размер премиальных зависит от специальности. В этом случае имеют место следующие ФЗ:

ТАБЕЛЬНЫЙ НОМЕР -> СПЕЦИАЛЬНОСТЬ

ТАБЕЛЬНЫЙ НОМЕР -> ПРЕМИЯ

СПЕЦИАЛЬНОСТЬ -> ПРЕМИЯ

Первые две ФЗ удовлетворяют критерию 3НФ. В третьей ФЗ атрибут СПЕЦИАЛЬНОСТЬ не является ключом. Следовательно, критерий 3НФ нарушен. В то же время таблица удовлетворяет 2НФ, так как ключ состоит из одного атрибута. Рассмотрим недостатки, присущие таблицам, не удовлетворяющим 3НФ:

· Размер премиальных для вида специальности повторяется в каждой строке, относящейся к работнику этой специальности. Это избыточные данные.

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

· Если в какой-то момент времени отсутствуют работники данной специальности, то может не оказаться строки, в которой можно хранить размер премиальных. Это аномалия ввода.

Для приведения таблицы к 3НФ воспользуемся методом разбиения. Разобьем таблицу РАБОТНИК на две таблицы: Т1 (ТАБЕЛЬНЫЙ НОМЕР, СПЕЦИАЛЬНОСТЬ) и Т2 (СПЕЦИАЛЬНОСТЬ, ПРЕМИЯ). Внешним ключом является СПЕЦИАЛЬНОСТЬ. Если хотя бы одна из полученных таблиц нарушает 3НФ, то процесс разбиения продолжается.

ЧЕТВЕРТАЯ НОРМАЛЬНАЯ ФОРМА. Первая нормальная форма запрещает таблицам иметь неатомарные (многозначные) атрибуты. Однако на практике существует множество ситуаций моделирования, требующих многозначных атрибутов. Например, преподаватель университета может вести несколько предметов и работать в нескольких комиссиях (рис. 16).

Фамилия Комиссия Предмет
Иванов Государственная аттестационная  
Иванов Приемная  
Иванов   Информатика
Иванов   Базы данных
Иванов   Программирование

Рис. 16. Представление многозначных атрибутов в одной таблице.

Фамилия Комиссия Предмет
Иванов Государственная аттестационная Информатика
Иванов Государственная аттестационная Базы данных
Иванов Государственная аттестационная Программирование
Иванов Приемная Информатика
Иванов Приемная Базы данных
Иванов Приемная Программирование

Рис. 17. Таблица с многозначной зависимостью.

На рис. 17 показан подход к решению проблемы участия преподавателя в комиссиях и ведения предметов. Здесь имеют место пустые значения атрибутов, что нарушает категорную целостность, поскольку все атрибуты вместе составляют ключ таблицы. Кроме того, очевидно, что атрибуты КОМИССИЯ и ПРЕДМЕТ не зависят друг от друга. Устранить это можно следующим образом. Потребуем, чтобы каждое значение атрибута КОМИССИЯ сочеталось с каждым значением атрибута ПРЕДМЕТ как минимум в одной строке (рис. 18).

Фамилия Комиссия Предмет
Иванов Государственная аттестационная Информатика
Иванов Государственная аттестационная Базы данных
Иванов Государственная аттестационная Программирование
Иванов Приемная Информатика
Иванов Приемная Базы данных
Иванов Приемная Программирование

Рис. 18. Таблица с многозначной зависимостью.

Условие, обеспечивающее независимость атрибутов путем обязательного повторения значений, называется многозначной зависимостью (МЗЗ). МЗЗ является таким же ограничительным условием, как и ФЗ. Недостатком таблицы на рис. 18 является большое число повторений значений данных. Поэтому важным этапом процесса нормализации является избавление от многозначных зависимостей.

Таблица имеет четвертую нормальную форму (4НФ), если она имеет 3НФ и не содержит многозначных зависимостей. Так как проблема многозначных зависимостей возникает в связи с многозначными атрибутами, то можно решить эту проблему, поместив каждый многозначный атрибут в отдельную таблицу вместе с ключом, от которого атрибут зависит. В нашем примере таблица может быть разбита на две таблицы: КОМИССИЯ (ФАМИЛИЯ, КОМИССИЯ) и ПРЕДМЕТ (ФАМИЛИЯ, ПРЕДМЕТ). Ключом каждой полученной таблицы 4НФ являются оба атрибута таблицы.

ДРУГИЕ НОРМАЛЬНЫЕ ФОРМЫ. Для избавления от некоторых других аномалий были предложены еще несколько нормальных форм. Но эти нормальные формы имеют в основном теоретический интерес и сомнительную практическую ценность. Поэтому в рамках настоящих методических указаний их рассматривать не будем.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: