double arrow

Нормализация отношений в реляционных базах данных


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

Например, рассмотрим БД, состоящую из трех связанных таблиц:

СТУДЕНТ(номер зачетной книжки, Ф., И., О., дата рождения, группа), СЕССИЯ (номер зачётной книжки, оценка1, оценка2,..., оценка п, результаты сдачи сессии), СТИПЕНДИЯ(результаты сдачи сессии, размер стипендии).

Отношения студент и сессия имеют совпадающие ключи (номер зачетной книжки).

Рис. 4.5. Связывание таблиц через ключи

Таблица СЕССИЯ имеет первичный КЛЮЧ (номер зачетной книжки) и содержит внешний ключ (результаты сдачи сессии), который обеспечивает ее связь с таблицей стипендия (рис. 10.5).

В реляционных базах данных определены три типа связей:




• один к одному (1:1) – любая запись в первой таблице может быть связана только с одной записью второй таблицы и наоборот;

• один ко многим (1:М) – любая запись первой таблицы связана с несколькими записями второй, но любая запись во второй таблице связана только с одной записью первой таблицы;

• многие ко многим (М:М) – каждой записи первой таблицы соответствуют несколько записей второй и наоборот. В явном виде эта связь в реляционных БД не поддерживается, но имеются способы ее косвенной организации путем создания дополнительных таблиц.

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

В реляционных базах данных отношения (таблицы) содержат как структурную, так и семантическую информацию. Структурная информация связана с объявлением отношений. Семантическая информация выражается множеством известных функциональных зависимостей между атрибутами отношений, имеющимися в схеме.

Таким образом, в отношениях (таблицах) практически всегда присутствуют функциональные зависимости. Для устранения нежелательных функциональных зависимостей между атрибутами (столбцами) Э.Kодд предложил использовать разработанный им процесс нормализации отношений. Это процедура декомпозиции (разложения), при которой данное множество отношений заменяется другим множеством отношений (при этом число их возрастает), являющихся проекциями первых. Другими словами, нормализация – это пошаговый обратимый процесс замены данной схемы отношений другой схемой, в которой отношения имеют более простую и регулярную структуру.



Итак, нормализация отношений – формальный аппарат ограничений на формирование таблиц, который позволяет устранить дублирование, обеспечивает непротиворечивость хранимых в базе данных, уменьшает трудозатраты на ведение БД.

Различают шесть нормальных форм:

1) 1НФ — первую нормальную форму;

2) 2НФ — вторую нормальную форму;

3) 3НФ — третью нормальную форму;

4) НФБК — нормальную форму Бойса –Кодда;

5) 4НФ — четвертую нормальную форму;

6) 5НФ — пятую нормальную форму.

Каждая нормальная форма определяет ограничения на данные:

• 1НФ, 2НФ, 3НФ – ограничивают зависимость не первичных атрибутов от ключей;

• НФБК – ограничивает зависимость первичных атрибутов;

• 4НФ – формирует ограничения на виды многозначных зависимостей;

• 5НФ – вводит другие типы зависимостей: зависимости соединения.

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



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

Преобразование отношений к первой нормальной форме может привести к увеличению количества реквизитов (полей) отношения и изменению ключа. Например, отношение СТУДЕНТ (номер зачетной книжки, Ф., И., О., дата рождения, группа) находится в первой нормальной форме. Если бы поля Ф., И., О. были бы объединены в одно, то нормализация отношений состояла бы в фрагментации данного поля. Разработчики БД изначально строят так исходные отношения, чтобы они были в первой нормальной форме.

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

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

Для описания второй и третьей нормальных форм требуется ввести понятие о функциональной зависимости полей (атрибутов). Функциональная зависимость полей – это зависимость, при которой в экземпляре информационного объекта определенному значению ключевого поля соответствует только одно значение не ключевого поля. Таким образом, это логическая связь не ключевых полей с общим для них ключом.

В случае составного ключа вводится понятие функционально полной зависимости. Функционально полная зависимость не ключевых полей заключается в том, что каждое не ключевое поле функционально зависит от ключа, но не зависит ни от какой части составного ключа. Отношение будет находиться во второй нормальной форме, если оно находится в первой нормальной форме, и каждое не ключевое поле функционально полно зависит от составного ключа. Так отношение студент находится во второй нормальной форме, т. к. его не ключевые поля функционально зависят от ключа номер зачетной книжки. Отношение сессия, имеющее составной ключ номер зачетной книжки + результаты сдачи сессии находится в первой нормальной форме, но не находится во второй, т.к. поля оценка1, оценка2,..., оценка n не находятся в полной функциональной зависимости от составного ключа, а лишь от его составной части. Для перевода этого отношения во вторую нормальную форму необходимо исключить из него поля оценка1, оценка2,..., оценка n, т. е. исходное отношение надо разбить на два связанных отношения РЕЗУЛЬТАТЫ (номер зачетной книжки, оценка1., оценка2,..., оценка п) И СЕССИЯ(номер зачетной книжки, результаты сдачи сессии). Связь между ними будет осуществляться по полю номер зачетной книжки (рис. 10.6)

Рис. 10.6. Вторая нормальная форма отношений

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

Отношение будет находиться в третьей нормальной форме, если оно находится во второй нормальной форме, и каждое не ключевое поле не транзитивно (т. е. напрямую) зависит от первичного ключа. Отношение студент находится в третьей нормальной форме. Если в состав описательных полей этого информационного объекта добавить фамилию старосты группы – староста, то появится транзитивная зависимость не ключевого поля староста от ключа через не ключевое поле группа.

Для устранения транзитивной зависимости описательных полей необходимо произвести «расщепление» исходного информационного объекта. В результате такого расщепления часть полей удаляется из исходного объекта и включается в состав других, новых информационных объектов: СТУДЕНТ(номер зачетной книжки, Ф., И., О., дата рождения, группа), ГРУППА {группа, староста) (рис. 10.7).

Рис. 10.7. Исключение транзитивной зависимости








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