Нормализация данных

В данном пункте даются самые общие понятия о нормализации данных.

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

Положительные эффекты от нормализации:

1. сокращение размера конечной БД;

2. уменьшение возможностей возникновения аномалий в процессе эксплуатации БД или их устранение.

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

Отрицательные эффекты:

1. замедление (часто существенное) выполнения сложных запросов, поскольку в условиях нормализации часто требуется производить большое количество ресурсоемких операций соединения таблиц;

2. усложнение запросов.

Собственно процесс нормализации можно рассматривать как последовательное приведение структуры модели к так называемым нормальным формам (НФ). НФ представляет собой совокупность формализованных требований к структуре модели. Обычно выделяют шесть НФ:

1. первая НФ (1NF);

2. вторая НФ (2NF);

3. третья НФ (3NF);

4. НФ Бойса-Кодда (BCNF);

5. четвертая НФ (4NF);

6. пятая НФ (5NF).

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

На практике чаще всего выполняется приведение модели к третьей НФ. Множество средств разработки и СУБД ориентированы именно на такую структуру. Далее будут рассмотрены вопросы приведения модели к первой, второй и третьей нормальным формам как самые типичные.

В таблицы дана краткая характеристика рассматриваемых нормальных форм.

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

Необходимые определения.

Функциональная зависимость: атрибут A сущности E находится в функциональной зависимости от атрибута B сущности E, если значение B однозначно определяет A. Иначе говоря, существует некоторая функция f, так что A = f(B). Можно назвать A атрибутом-функцией, B — атрибутом-аргументом. Замечание. Из существования A = f(B) в общем случае не следует существование B = g(A).

Полная функциональная зависимость:атрибут A сущности E находится в полной функциональной зависимости от набора атрибутов B1, B2, …, Bn сущности E, если A функционально зависит от B1, B2, …, Bn, но не зависит функционально ни от какого подмножества из B1, B2, …, Bn.

Первая НФ

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

Например:

Здесь пара атрибутов "Телефон 1" и "Телефон 2" являются явным нарушением первой НФ, поскольку описывают, фактически, одну и ту же характеристику. С другой стороны, продемонстрированный "экстенсивный" подход к описанию характеристик сущности не решает проблему, или решает на короткий срок и в рамках узкой предметной области. Действительно, если у какого-то студента наберется десяток любимых занятий, то придется либо добавлять еще 7 атрибутов в сущность, либо вводе данных в систему принудительно отсекать все списки хобби размером более 3 элементов. Очевидно, что такой подход в общем случае не правилен.

Для приведения сущности к первой НФ необходимо:

1. выделить атрибуты, действительно характеризующие разные признаки сущности;

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

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

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

Для приведенного примера:

 

Вторая НФ

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

Пример:

Пусть в соответствии с состоянием предметной области табельный номер преподавателя курса однозначно задает ФИО преподавателя и кафедру, к которой приписан курс. Тогда эта сущность не удовлетворяет требованиям второй НФ.

Для приведения сущности, удовлетворяющей первой НФ, ко второй НФ необходимо:

1. найти атрибуты, которые зависят только от части первичного ключа;

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

3. установить идентифицирующие отношения между новыми сущностями и прежней, при этом новые сущности являются родительскими; в результате этой операции в преобразованную сущность "вернутся" части ее первичного ключа как внешние ключи.

В случае сущности "Курс" модификация будет такой:

Третья НФ

Смысл требований третьей НФ состоит в том, что не должно быть детерминированных зависимостей между неключевыми атрибутами. Естественно, при этом должны выполняться и условия для "младшей" НФ — второй.

Пусть в уже использовавшейся для иллюстрации сущности "Курс" имеется также атрибут "Факультет":

Если считать, что каждая кафедра приписана только к одному факультету, то в данной сущности имеется аномалия не только с точки зрения второй НФ, но и третьей НФ.

Последовательность шагов для приведения сущности от второй НФ к третьей:

1. выделить наборы атрибутов, зависящих от одного и того же неключевого атрибута (или совокупности неключевых атрибутов);

2. для каждого такого набора создать новую сущность и перенести в нее этот набор атрибутов, а также тот неключевой атрибут, который определяет функциональную зависимость (атрибут-аргумент); последний станет уникальным ключом новой сущности;

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

В соответствии с таким алгоритмов получается следующая структура:








Дата добавления: 2018-11-25; просмотров: 519;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.008 сек.