Нормальные формы: первая и вторая
Первая и вторая нормальные формы разработаны Эдгаром Коддом и являются достаточно "самоочевидными". Самоочевидность заключается в том, что отношения в первой и второй нормальной формах обладают интуитивно понятными базовыми свойствами, которые логично требовать от отношений, используемых в рамках баз данных.
Содержание
Первая нормальная форма
Определение: |
Отношение находится в первой нормальной форме (1НФ) тогда и только тогда, когда
|
Первая нормальная форма эквивилентна отношению в строгом смысле этого слова. Каждый из данных критериев отвечает за запрет конструкций определенного вида.
Запрещенные конструкции
Повторяющиеся группы
CourseId | Lecturer | Phone (1) | Phone (2) |
---|---|---|---|
1 | Корнеев Г. А. | 111-11-11 | |
2 | Киракозов А. Х. | 222-22-22 | 333-33-33 |
3 | Кудряшов Б. Д. | 444-44-44 | 555-55-55 |
4 | Сегаль А. С. | 666-66-66 |
В отношениях такого вида сложно обеспечивать консистентность данных. Рассмотрим пример выше. Первая возникающая проблема заключается в том, что при появлении преподавателя с более, чем двумя телефонами, придется изменять целиком структуру отношения. Вторая проблема -- на выполнение запроса "проверить, что никакие два преподавателя не имеют одинаковый телефон" и других запросов, аналогичных данному, потребуется экспоненциальное от количества полей с данными о телефонах время.
Неатомарные атрибуты
CourseId | Lecturer | Phones |
---|---|---|
1 | Корнеев Г. А. | 111-11-11 |
2 | Киракозов А. Х. | 222-22-22 |
333-33-33 | ||
3 | Кудряшов Б. Д. | 444-44-44 |
555-55-55 | ||
4 | Сегаль А. С. | 666-66-66 |
Потенциальным решением проблемы повторяющихся групп является группировка атрибутов по смыслу. На примере показано, как несколько телефонов из прошлого отношения были сгруппированы в единый атрибут, что позволяет не изменять структуру отношения в зависимости от максимального количества телефонов у одного человека. Однако проблема большого времени работы проверки корректности данных все еще остается.
Отсутствие ключа
Отношение без ключа формально не является отношением. Отсутствие ключа говорит о повторяющихся записях, а отношения рассматриваются как подмножества декартового произведения других множеств, что в явном виде запрещает повторы.
Приведение в 1НФ
Для того, чтобы привести произвольное отношение
в 1НФ, достаточно:- рассмотреть все наборы атрибутов, имеющих одинаковый смысл
- для каждого фиксированного значения оставшихся атрибутов сделать по записи на каждое значение выбранных:
- рассмотрим повторяющиеся атрибуты
- рассмотрим оставшиеся атрибуты
- построим такое отношение на атрибутах , что
- аналогичную процедуру повторить для всех неатомарных атрибутов
Отношение, использованое в примерах выше, после приведения в 1НФ будет выглядеть как
CourseId | Lecturer | Phone |
---|---|---|
1 | Корнеев Г. А. | 111-11-11 |
2 | Киракозов А. Х. | 222-22-22 |
2 | Киракозов А. Х. | 333-33-33 |
3 | Кудряшов Б. Д. | 444-44-44 |
3 | Кудряшов Б. Д. | 555-55-55 |
4 | Сегаль А. С. | 666-66-66 |
Аномалии
Определение: |
Аномалия – эффект, возникающий при недостаточной нормализации БД или сложных зависимостях между данными, влекущий за собой проблемы
|
Переход в 1НФ не уменьшает выразительную способность "разрешенных" отношений, но при этом исправляет только самые простые аномалии, поэтому в отношениях в 1НФ, не приведенных хотя бы в 2НФ, могут возникать аномалии более сложного вида.
Определение: |
Аномалия вставки – зависимость возможности записать обладающие собственным независимым смыслом данные от наличия другой связанной информации. |
В рассмотренном выше примере невозможно записать информацию о телефоне конкретного преподавателя, если он не читает ни один курс (таким образом, возможность записать
для конкретного зависит от наличия соответствующего , хотя напрямую они не зависят друг от друга).
Определение: |
Аномалия удаления – невозможность удалить часть данных, не удалив никакую связанную с ней информацию. |
В рассмотренном выше, опять же, примере невозможно удалить информацию о том, что конкретный преподаватель читает конкретный курс, не потеряв его номер телефона (как и в случае с аномалией вставки, возможность хранить
зависит от существования соответствующего ).
Определение: |
Аномалия изменения – ситуация, в которой частичное изменение данных нарушает целостность базы данных. |
В рассмотренном примере если один преподаватель ведет один курс и имеет два телефона, при изменении
в одной из соответствующих ему записей будет невозможно восстановить какой курс на самом деле ведет преподаватель (записи с разными , но одинаковыми и , должны всегда поддерживаться в таком же состоянии).Вторая нормальная форма
Определение: |
Отношение находится во второй нормальной форме (2НФ) тогда и только тогда, когда
|
Вторая нормальная форма позволяет избавиться от некоторых аномалий, возникающих в отношениях в 1НФ.
Запрещенные конструкции
В 2НФ запрещено, чтобы какие-либо атрибуты функционально зависели от части ключа. Рассмотрим следующий пример, уже приведенный в 1НФ:
CourseId | Year | Lecturer | Exam |
---|---|---|---|
1 | 2020 | Корнеев Г. А. | yes |
2 | 2019 | Киракозов А. Х. | no |
2 | 2020 | Киракозов А. Х. | no |
3 | 2019 | Левина А. Б. | yes |
3 | 2020 | Чепурной А. И. | yes |
В данном отношении можно выделить следующие функциональные зависимости:
(наличие экзамена зависит только от предмета) и (каждый год только один преподаватель читает конкретный предмет). Таким образом, ключ в данном отношении – , но при этом зависит только от части ключа.Отношения в 1НФ имеют аномалии вставки и удаления (нельзя хранить информацию про экзамен, не зная лектора) и изменения (можно изменить информацию про экзамен по предмету только для одного года). От этих аномалий можно избавиться, если убрать функциональные зависимости от части ключа.
Приведение в 2НФ
Отношение в 1НФ приводится к 2НФ декомпозицией по "мешающим" функциональным зависимостям. На примере выше такая зависимость только одна –
.Определение: |
Декомпозиция отношения | , состоящего из наборов атрибутов , по функциональной зависимости – пара отношений и .
Декомпозиция рассмотренного примера по "лишней" функциональной зависимости дает следующий результат:
CourseId | Year | Lecturer |
---|---|---|
1 | 2020 | Корнеев Г. А. |
2 | 2019 | Киракозов А. Х. |
2 | 2020 | Киракозов А. Х. |
3 | 2019 | Левина А. Б. |
3 | 2020 | Чепурной А. И. |
CourseId | Exam |
---|---|
1 | yes |
2 | no |
3 | yes |
После данной декомпозиции, как можно заметить, информация об экзамене по предмету и информация о преподавателе по предмету в конкретный год стали независимыми. Это значит, что больше нет аномалий, свойственных 1НФ: вставка, удаление и изменение данных не затрагивают не связанную с ними напрямую информацию.
Аномалии
Аномалия, свойственная 2НФ, возникает, когда какой-то атрибут зависит от ключа транзитивно через множество неключевых атрибутов. Рассмотрим следующий пример:
CourseId | Year | Lecturer | Phone |
---|---|---|---|
1 | 2020 | Корнеев Г. А. | 111-11-11 |
2 | 2019 | Киракозов А. Х. | 222-22-22 |
2 | 2020 | Киракозов А. Х. | 222-22-22 |
3 | 2019 | Левина А. Б. | 333-33-33 |
3 | 2020 | Чепурной А. И. | 444-44-44 |
В нем есть две базовые функциональные зависимости: третью нормальную форму и выше.
и . Несмотря на то, что данное отношение находится в 2НФ, в нем все еще имеют место все три аномалии 1НФ – аномалии вставки, удаления и изменения (информация о телефонах и о преподавании никак не разделена). Для исправления аномалий 2НФ отношение переводят в