Поиск по блогу

Нормальные формы - три кита, на которых стоит структура базы данных.

Нормализация - это ...

Нормализация отношений* применяется для правильного проектирования базы данных (модели данных), то есть для устранения аномалий обновления. Аномалии обновления проявляют себя при выполнении операций изменяющих состояние базы данных. Различают три типа аномалий:
  1. Аномалии вставки - INSERT
  2. Аномалии обновления - UPDATE
  3. Аномалии удаления - DELETE

Пример аномалии: если сотрудник поменял паспорт, то нужно будет во всех отношениях, где хранится номер и серия паспорта, изменить их, иначе данные будут расходиться.

Допустим, у нас имеется описание предметной области:
  • Сотрудники организации выполняют проекты;
  • Проекты состоя из нескольких заданий;
  • Каждый сотрудник может участвовать в одном или нескольких проектах, или временно не участвовать ни в каких проектах;
  • Над каждым проектом может работать несколько сотрудников или временно проект может быть приостановлен, тогда над ним не работает ни один сотрудник;
  • Над каждым заданием проекта работает ровно один сотрудник;
  • Каждый сотрудник числиться в одном отделе;
  • Каждый сотрудник имеет телефон, находящий в отделе сотрудника.

*отношение - таблица в базе данных, например - сотрудники, клиенты и т.д.

Первая нормальная форма

Описание 1НФ


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

*кортеж - это запись(строка) в таблице базы данных
*атрибут - это колонка таблицы
*атомарность - значение нельзя разделить на несколько атрибутов

Приведение к 1НФ


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

Вторая нормальная форма

Описание 2НФ


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

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

В нашем случает у таблицы сотрудники_отделы_проекты имеется сложный(составной) ключ {Н_СОТР, Н_ПРО}. От части ключа Н_СОТР зависят неключевые атрибуты ФАМ, Н_ОТД, ТЕЛ. От части ключа Н_ПРО зависит неключевой атрибут ПРОЕКТ. А вот атрибут Н_ЗАДАН зависит от всего составного ключа, так как сотрудник может выполнять одно задание в одном проекте (см. описание предметной области).

Вывод: отношение сотрудники_отделы_проекты декомпозируем на три отношения - сотрудники_отделы(справочник), проекты(справочник), задания(регистр сведений).
Отношение сотрудники_отделы
Отношение проекты
Отношение задания
Отношения, полученный в результате декомпозиции, находятся во второй нормальной форме. Отношения сотрудники_отделы и проекты имеют простые ключ, следовательно они автоматически находятся в 2НФ. Отношение задания имеет сложный ключ, но единственный неключевой атрибут Н_ЗАДАН зависит от всего ключа {Н_СОТР, Н_ПРО} (надеюсь вы сами поняли какие будут измерения и ресурсы у этого Р/С).

*неключевой атрибут - это атрибут, не входящий в состав никакого потенциального ключа

Приведение к 2НФ


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

То есть из отношения сотрудники_отделы_проекты выделили два отношения сотрудники_отделы и проекты, а исходное отношение стало отношением задания.

Третья нормальная форма

Описание 3НФ


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

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

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

Приведение к 3НФ


Если в некоторых отношениях обнаружена зависимость некоторых неключевых атрибутов от других неключевых атрибутов, то проводим декомпозицию этих отношений следующим образом: неключевые атрибуты, которые зависят от других неключевых атрибутов выносятся в отдельное отношение. В новом отношении ключом становится детерминант* зависимости. В нашем случае ключом(детерминант) это атрибут Н_ОТД.

*детерминант - атрибут, от которого зависит другой атрибут.

Вывод

Используя приведение к третьей нормальной форме, мы снижаем вероятность проявления аномалии обновления базы данных!!!

Комментариев нет:

Отправить комментарий