Изменения

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

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

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

Навигация