Изменения

Перейти к: навигация, поиск

Нормальные формы: первая и вторая

5357 байт добавлено, 19:17, 4 сентября 2022
м
rollbackEdits.php mass rollback
Первая и вторая нормальные формы разработаны Эдгаром Коддом и являются достаточно "«самоочевидными"». Самоочевидность заключается в том, что отношения в первой и второй нормальной формах обладают интуитивно понятными базовыми свойствами, которые логично требовать от отношений, используемых в рамках баз данных.
== Первая нормальная форма ==
| 4 || Сегаль А. С. || 666-66-66 ||
|}
 В отношениях такого вида сложно обеспечивать консистентность данных. Рассмотрим пример выше. Первая возникающая проблема заключается в том, что при появлении преподавателя с более, чем двумя телефонами, придется изменять целиком структуру отношения. Вторая проблема -- – на выполнение запроса "«проверить, что никакие два преподавателя не имеют одинаковый телефон" » и других запросов, аналогичных данному, потребуется экспоненциальное от количества полей с данными о телефонах время.
==== Неатомарные атрибуты ====
| 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 !! PhonesPhone
|-
| 1 || Корнеев Г. А. || 111-11-11
* технической/алгоритмической сложность внесения или изменения данных
}}
Переход в 1НФ не уменьшает выразительную способность "&laquo;разрешенных" &raquo; отношений, но при этом исправляет только самые простые аномалии, поэтому в отношениях в 1НФ, не приведенных хотя бы в во 2НФ, могут возникать аномалии более сложного вида. ==== Аномалия вставки ====
{{Определение
'''Аномалия вставки''' &ndash; зависимость возможности записать обладающие собственным независимым смыслом данные от наличия другой связанной информации.
}}
В рассмотренном выше примере невозможно записать информацию о телефоне конкретного преподавателя, если он не читает ни один курс (таким образом, возможность записать <tex>\mathrm{Phone }</tex> для конкретного <tex>\mathrm{Lecturer }</tex> зависит от наличия соответствующего <tex>\mathrm{CourseId}</tex>, хотя напрямую они не зависят друг от друга).{{Определение|definition='''Аномалия удаления''' &ndash; невозможность удалить часть данных, не удалив никакую связанную с ней информацию.}}В рассмотренном выше, опять же, примере невозможно удалить информацию о том, что конкретный преподаватель читает конкретный курс, не потеряв его номер телефона (как и в случае с аномалией вставки, возможность хранить <tex>\mathrm{Phone}</tex> зависит от существования соответствующего <tex>\mathrm{CourseId}</tex>).{{Определение|definition='''Аномалия изменения''' &ndash; ситуация, в которой частичное изменение данных нарушает целостность базы данных.}}В рассмотренном примере если один преподаватель ведет один курс и имеет два телефона, при изменении <tex>\mathrm{CourseId}</tex> в одной из соответствующих ему записей будет невозможно восстановить какой курс на самом деле ведет преподаватель (записи с разными <tex>\mathrm{Phone}</tex>, но одинаковыми <tex>\mathrm{Lecturer}</tex> и <tex>\mathrm{CourseId}</tex>, должны всегда поддерживаться в таком же состоянии).
==== Аномалия удаления ==Вторая нормальная форма ==
{{Определение
|definition=
Отношение находится во '''Аномалия удалениявторой нормальной форме''' &ndash; невозможность удалить часть данных(2НФ) тогда и только тогда, когда* оно находится в первой нормальной форме* все неключевые атрибуты [[Функциональные_зависимости:_замыкание,_эквивалентность_и_правила_вывода|функционально зависят]] от ключа целиком, но не удалив никакую связанную с ней информацию.от его части
}}
В рассмотренном вышеВторая нормальная форма позволяет избавиться от некоторых аномалий, опять же, примере невозможно удалить информацию о том, что конкретный преподаватель читает конкретный курс, не потеряв его номер телефона (как и возникающих в отношениях в случае с аномалией вставки, возможность хранить Phone зависит от существования соответствующего CourseId)1НФ=== Запрещенные конструкции ===
Во 2НФ запрещено, чтобы какие-либо атрибуты функционально зависели от части ключа. Рассмотрим следующий пример, уже приведенный в 1НФ:{| class==== Аномалия изменения ===="wikitable"! CourseId !! Year || Lecturer !! Exam|-| 1 || 2020 || Корнеев Г. А. || yes|-| 2 || 2019 || Киракозов А. Х. || no|-| 2 || 2020 || Киракозов А. Х. || no|-| 3 || 2019 || Левина А. Б. || yes|-| 3 || 2020 || Чепурной А. И. || yes|}
В данном отношении можно выделить следующие функциональные зависимости: <tex>\mathrm{CourseId} \rightarrow \mathrm{Exam}</tex> (наличие экзамена зависит только от предмета) и <tex>\mathrm{CourseId}, \mathrm{Year} \rightarrow \mathrm{Lecturer}</tex> (каждый год только один преподаватель читает конкретный предмет). Таким образом, ключ в данном отношении &ndash; <tex>\mathrm{CourseId}, \mathrm{Year}</tex>, но при этом <tex>\mathrm{Exam}</tex> зависит только от части ключа.
 
Отношения в 1НФ имеют аномалии вставки и удаления (нельзя хранить информацию про экзамен, не зная лектора) и изменения (можно изменить информацию про экзамен по предмету только для одного года). От этих аномалий можно избавиться, если убрать функциональные зависимости от части ключа.
 
=== Приведение во 2НФ ===
 
Отношение в 1НФ приводится к 2НФ декомпозицией по &laquo;мешающим&raquo; функциональным зависимостям. На примере выше такая зависимость только одна &ndash; <tex>\mathrm{CourseId} \rightarrow \mathrm{Exam}</tex>.
{{Определение
|definition=
'''Аномалия измененияДекомпозиция''' отношения <tex>R</tex>, состоящего из наборов атрибутов <tex>A, B, C</tex>, по функциональной зависимости <tex>A \rightarrow B</tex> &ndash; ситуацияпара отношений <tex>\pi_{A, B} R</tex> и <tex>\pi_{A, в которой частичное изменение данных нарушает целостность базы данныхC} R</tex>.
}}
В рассмотренном примере если один преподаватель ведет один курс и имеет два телефона, при изменении Декомпозиция рассмотренного примера по &laquo;лишней&raquo; функциональной зависимости дает следующий результат:{| class="wikitable"! CourseId в одной из соответствующих ему записей будет невозможно восстановить какой курс на самом деле ведет преподаватель (записи с разными Phone, но одинаковыми !! Year || Lecturer и |-| 1 || 2020 || Корнеев Г. А.|-| 2 || 2019 || Киракозов А. Х.|-| 2 || 2020 || Киракозов А. Х.|-| 3 || 2019 || Левина А. Б.|-| 3 || 2020 || Чепурной А. И.|} {| class="wikitable"! CourseId, должны всегда поддерживаться в таком же состоянии).!! Exam|-| 1 || yes|-| 2 || no|-| 3 || yes|}
== Вторая нормальная форма ==ТребованияПосле данной декомпозиции, как можно заметить, информация об экзамене по предмету и информация о преподавателе по предмету в конкретный год стали независимыми. Это значит, что больше нет аномалий, свойственных 1НФ: вставка, удаление и изменение данных не затрагивают не связанную с ними напрямую информацию.
* Первая нормальная форма* Неключевые атрибуты функционально зависят от ключа в-целом, а не от его части.=== Аномалии ===
1НФ приводится к Аномалия, свойственная 2НФ декомпозицией по мешающим функциональным зависимостям, возникает, когда какой-то атрибут зависит от ключа транзитивно через множество неключевых атрибутов.Рассмотрим следующий пример:{| class="wikitable"! 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|}
АномалииВ нем есть две базовые функциональные зависимости: зависимость от ключа может быть транзитивной<tex>\mathrm{CourseId}, \mathrm{Year} \rightarrow \mathrm{Lecturer}</tex> и <tex>\mathrm{Lecturer} \rightarrow \mathrm{Phone}</tex>. Несмотря на то есть неключевые атрибуты могут прямо зависеть от других неключевых атрибутов, что данное отношение находится во 2НФ, в нем все еще имеют место все три аномалии 1НФ &ndash; аномалии вставки, удаления и изменения (информация о телефонах и о преподавании никак не разделена). Для исправления аномалий 2НФ отношение переводят в [[Нормальные_формы:_третья_и_Бойса-Кодда|третью нормальную форму и выше]].
1632
правки

Навигация