Нормальные формы: первая и вторая — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Создание страницы)
 
(Добавлено подробное описание первой нормальной формы)
Строка 1: Строка 1:
==Первая нормальная форма==
+
Первая и вторая нормальные формы разработаны Эдгаром Коддом и являются достаточно "самоочевидными". Самоочевидность заключается в том, что отношения в первой и второй нормальной формах обладают интуитивно понятными базовыми свойствами, которые логично требовать от отношений, используемых в рамках баз данных.
  
Требования
+
== Первая нормальная форма ==
  
* В отношении нет повторяющихся групп
+
{{Определение
* Все атрибуты атомарны
+
|definition=
* У отношения есть ключ
+
Отношение находится в '''первой нормальной форме''' (1НФ) тогда и только тогда, когда
 +
* в отношении нет повторяющихся групп (атрибутов с одинаковым смыслом)
 +
* все атрибуты атомарны
 +
* у отношения есть ключ
 +
}}
 +
Первая нормальная форма эквивилентна отношению в строгом смысле этого слова. Каждый из данных критериев отвечает за запрет конструкций определенного вида.
  
Первая нормальная форма эквивилентна отношению.
+
=== Запрещенные конструкции ===
  
Аномалии: сложная зависимость одних данных от других из-за недостаточной нормализации. Проблемы: некорректные данные, невозможность сохранения некоторых данных, сложное внесение и изменение данных.
+
==== Повторяющиеся группы ====
 +
 
 +
{| class="wikitable"
 +
! 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 ||
 +
|}
 +
 
 +
В отношениях такого вида сложно обеспечивать консистентность данных. Рассмотрим пример выше. Первая возникающая проблема заключается в том, что при появлении преподавателя с более, чем двумя телефонами, придется изменять целиком структуру отношения. Вторая проблема -- на выполнение запроса "проверить, что никакие два преподавателя не имеют одинаковый телефон" и других запросов, аналогичных данному, потребуется экспоненциальное от количества полей с данными о телефонах время.
 +
 
 +
==== Неатомарные атрибуты ====
 +
 
 +
{| class="wikitable"
 +
! CourseId !! Lecturer !! Phones
 +
|-
 +
| 1 || Корнеев Г. А. || 111-11-11
 +
|-
 +
| rowspan="2" | 2 || rowspan="2" | Киракозов А. Х. || 222-22-22
 +
|-
 +
| 333-33-33
 +
|-
 +
| rowspan="2" | 3 || rowspan="2" | Кудряшов Б. Д. || 444-44-44
 +
|-
 +
| 555-55-55
 +
|-
 +
| 4 || Сегаль А. С. || 666-66-66
 +
|}
 +
 
 +
Потенциальным решением проблемы повторяющихся групп является группировка атрибутов по смыслу. На примере показано, как несколько телефонов из прошлого отношения были сгруппированы в единый атрибут, что позволяет не изменять структуру отношения в зависимости от максимального количества телефонов у одного человека. Однако проблема большого времени работы проверки корректности данных все еще остается.
 +
 
 +
==== Отсутствие ключа ====
 +
 
 +
Отношение без ключа формально не является отношением. Отсутствие ключа говорит о повторяющихся записях, а отношения рассматриваются как '''подмножества ''' декартового произведения других множеств, что в явном виде запрещает повторяющиеся записи.
 +
 
 +
=== Приведение в 1НФ ===
 +
 
 +
Для того, чтобы привести произвольное отношение <tex>R</tex> в 1НФ, достаточно:
 +
 
 +
# рассмотреть все наборы атрибутов, имеющих одинаковый смысл
 +
# для каждого фиксированного значения оставшихся атрибутов сделать по записи на каждое значение выбранных:
 +
## рассмотрим повторяющиеся атрибуты <tex>A_1, \ldots, A_k</tex>
 +
## рассмотрим оставшиеся атрибуты <tex>B_1, \ldots, B_n</tex>
 +
## построим такое отношение <tex>T</tex> на атрибутах <tex>B_1, \ldots, B_n, A</tex>, что <tex>\{b_1, \ldots, b_n, a\} \in T \Longleftrightarrow \{b_1 \ldots, b_n\} \in \pi_{B_1, \ldots, B_n}R \land a \in \bigcup\limits_{i=1}^k \pi_{A_i}R</tex>
 +
# аналогичную процедуру повторить для всех неатомарных атрибутов
 +
 
 +
Отношение, использованое в примерах выше, после приведения в 1НФ будет выглядеть как
 +
 
 +
{| class="wikitable"
 +
! CourseId !! Lecturer !! Phones
 +
|-
 +
| 1 || Корнеев Г. А. || 111-11-11
 +
|-
 +
| 2 || Киракозов А. Х. || 222-22-22
 +
|-
 +
| 2 || Киракозов А. Х. || 333-33-33
 +
|-
 +
| 3 || Кудряшов Б. Д. || 444-44-44
 +
|-
 +
| 3 || Кудряшов Б. Д. || 555-55-55
 +
|-
 +
| 4 || Сегаль А. С. || 666-66-66
 +
|}
 +
 
 +
=== Аномалии ===
 +
 
 +
{{Определение
 +
|definition=
 +
'''Аномалия''' &ndash; эффект, возникающий при недостаточной нормализации БД или сложных зависимостях между данными, влекущий за собой проблемы
 +
* возможной логической некорректности данных
 +
* невозможности представления некоторых данных в данной форме
 +
* технической/алгоритмической сложность внесения или изменения данных
 +
}}
 +
Переход в 1НФ не уменьшает выразительную способность "разрешенных" отношений, но при этом исправляет только самые простые аномалии, поэтому в отношениях в 1НФ, не приведенных хотя бы в 2НФ, могут возникать аномалии более сложного вида.
 
   
 
   
==Вторая нормальная форма==
+
==== Аномалия вставки ====
 +
 
 +
{{Определение
 +
|definition=
 +
'''Аномалия вставки''' &ndash; зависимость возможности записать обладающие собственным независимым смыслом данные от наличия другой связанной информации.
 +
}}
 +
В рассмотренном выше примере невозможно записать информацию о телефоне конкретного преподавателя, если он не читает ни один курс (таким образом, возможность записать Phone для конкретного Lecturer зависит от наличия соответствующего CourseId, хотя напрямую они не зависят друг от друга).
 +
 
 +
==== Аномалия удаления ====
 +
 
 +
{{Определение
 +
|definition=
 +
'''Аномалия удаления''' &ndash; невозможность удалить часть данных, не удалив никакую связанную с ней информацию.
 +
}}
 +
В рассмотренном выше, опять же, примере невозможно удалить информацию о том, что конкретный преподаватель читает конкретный курс, не потеряв его номер телефона (как и в случае с аномалией вставки, возможность хранить Phone зависит от существования соответствующего CourseId).
 +
 
 +
==== Аномалия изменения ====
 +
 
 +
{{Определение
 +
|definition=
 +
'''Аномалия изменения''' &ndash; ситуация, в которой частичное изменение данных нарушает целостность базы данных.
 +
}}
 +
В рассмотренном примере если один преподаватель ведет один курс и имеет два телефона, при изменении CourseId в одной из соответствующих ему записей будет невозможно восстановить какой курс на самом деле ведет преподаватель (записи с разными Phone, но одинаковыми Lecturer и CourseId, должны всегда поддерживаться в таком же состоянии).
 +
 
 +
== Вторая нормальная форма ==
 
Требования
 
Требования
  

Версия 02:27, 22 декабря 2020

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

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

Определение:
Отношение находится в первой нормальной форме (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НФ

Для того, чтобы привести произвольное отношение [math]R[/math] в 1НФ, достаточно:

  1. рассмотреть все наборы атрибутов, имеющих одинаковый смысл
  2. для каждого фиксированного значения оставшихся атрибутов сделать по записи на каждое значение выбранных:
    1. рассмотрим повторяющиеся атрибуты [math]A_1, \ldots, A_k[/math]
    2. рассмотрим оставшиеся атрибуты [math]B_1, \ldots, B_n[/math]
    3. построим такое отношение [math]T[/math] на атрибутах [math]B_1, \ldots, B_n, A[/math], что [math]\{b_1, \ldots, b_n, a\} \in T \Longleftrightarrow \{b_1 \ldots, b_n\} \in \pi_{B_1, \ldots, B_n}R \land a \in \bigcup\limits_{i=1}^k \pi_{A_i}R[/math]
  3. аналогичную процедуру повторить для всех неатомарных атрибутов

Отношение, использованое в примерах выше, после приведения в 1НФ будет выглядеть как

CourseId Lecturer Phones
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НФ, могут возникать аномалии более сложного вида.

Аномалия вставки

Определение:
Аномалия вставки – зависимость возможности записать обладающие собственным независимым смыслом данные от наличия другой связанной информации.

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

Аномалия удаления

Определение:
Аномалия удаления – невозможность удалить часть данных, не удалив никакую связанную с ней информацию.

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

Аномалия изменения

Определение:
Аномалия изменения – ситуация, в которой частичное изменение данных нарушает целостность базы данных.

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

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

Требования

  • Первая нормальная форма
  • Неключевые атрибуты функционально зависят от ключа в-целом, а не от его части.

1НФ приводится к 2НФ декомпозицией по мешающим функциональным зависимостям.

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