Изменения

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

Нормальные формы: третья и Бойса-Кодда

11 177 байт добавлено, 04:44, 22 декабря 2020
Добавлено подробное описание третьей нормальной формы и НФБК
==Третья нормальная форма==Требованияисправляет оставшиеся после приведения в 2НФ простые аномалии. Форма Бойса-Кодда является самой сильной формой, не допускающей аномалий, причиной возникновения которых являются немногозначные зависимости, и логически находится между третьей и четвертой НФ.
* Вторая == Третья нормальная форма* Неключевые атрибуты не транзитивно зависят от ключа==
Приведение к {{Определение|definition=Отношение находится в '''третьей нормальной форме''' (3НФ) тогда и только тогда, когда* оно находится во [[Нормальные_формы: декомпозиция по последней функциональной зависимости в транзитивной цепочке_первая_и_вторая|второй нормальной форме]]* неключевые атрибуты непосредственно (нетранзитивно) [[Функциональные_зависимости:_замыкание,_эквивалентность_и_правила_вывода|функционально зависят]] от ключей}}Третья нормальная форма позволяет исправить те аномалии, которые не были исправлены при переходе от 1НФ к 2НФ из-за транзитивных функциональных зависимостей.
==Нормальная форма Бойса-Кодда= Запрещенные конструкции ===Требования
* В каждой нетривиальной функциональной зависимости X Рассмотрим пример отношений, приведенных в 2НФ, которые еще не находятся в 3НФ:{| class="wikitable"! CourseId !! Year || Lecturer || Phone|-| 1 || 2020 || Корнеев Г. А. || 111-11-11|-| 2 || 2019 || Киракозов А. Х. || 222-22-22|-| 2 || 2020 || Киракозов А. Х. || 222-22-> Y, X является надключом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>. Из-за того, что <tex>\mathrm{Phone}</tex> только транзитивно зависит от ключа, но имеют место аномалии вставки, удаления и от каких-то других неключевых атрибутовизменения.
НФБК сильнее === Приведение в 3НФ. Приводится из 3НФ декомпозицией по мешающим атрибутам, если это возможно (например, нельзя выбросить часть ключа, которая функционально зависит от неключевого атрибута).===
Особенности: распадение функциональных Отношение в 2НФ приводится в 3НФ похожим образом на то, как 1НФ приводится в 2НФ &ndash; с помощью декомпозиции по неудовлетворяющим условию функциональным зависимостям. Чтобы избавиться от транзитивных зависимостей на части, находящиеся выполним декомпозицию по последней в разных отношенияхкаждой цепочке ФЗ зависимости, и будем повторять такую операцию, пока все цепочки зависимостей не станут длины 1. В данном примере единственная цепочка ФЗ &ndash; это <tex>\mathrm{CourseId}, \mathrm{Year} \rightarrow \mathrm{Lecturer} \rightarrow \mathrm{Phone}</tex>. Выполнив декомпозицию по <tex>\mathrm{Lecturer} \rightarrow \mathrm{Phone}</tex>, получим{| class="wikitable"! CourseId !! Year || Lecturer|-| 1 || 2020 || Корнеев Г. А.|-| 2 || 2019 || Киракозов А. Х.|-| 2 || 2020 || Киракозов А. Х.|-| 3 || 2019 || Левина А. Б.|-| 3 || 2020 || Чепурной А. И.|} {| class="wikitable"! Lecturer || Phone|-| Корнеев Г. А. || 111-11-11|-| Киракозов А. Х. || 222-22-22|-| Левина А. Б. || 333-33-33|-| Чепурной А. И.|| 444-44-44|}
НФБК Нетрудно заметить, что после приведения в 3НФ не остается никаких "неявных" зависимостей между атрибутами одного отношения. Благодаря этому, аномалии вставки, удаления и изменения больше не проявляются: не зависимые друг от друга напрямую неключевые данные никак не влияют на возможности сохранить или обновить ту или иную информацию. === Аномалии === Отношения в 3НФ все еще подвержены аномалии обновления, но в более редких случаях. Рассмотрим следующий пример, в котором у каждого преподавателя свой телефон и каждый преподаватель принимает у ровно одной группы.{| class="wikitable"! CourseId || Group || Examiner || Phone|-| 1 || M3239 || Корнеев Г. А. || 111-11-11|-| 4 || M3439 || Корнеев Г. А. || 111-11-11|-| 1 || M3238 || Ведерников Н. В. || 222-22-22|-| 2 || M3439 || Киракозов А. Х. || 333-33-33|} Функциональные зависимости в данном отношении &ndash; это <tex>\mathrm{CourseId}, \mathrm{Group} \rightarrow \mathrm{Examiner}</tex>, <tex>\mathrm{CourseId}, \mathrm{Examiner} \rightarrow \mathrm{Group}</tex> и <tex>\mathrm{Examiner} \leftrightarrow \mathrm{Phone}</tex>, а также все порождаемые ими. Если преподаватель ведет разные предметы у разных групп, такая структура отношения позволяет задать преподавателю разные телефоны, что нарушает целостность БД. Причиной такой аномалии является то, что в данном отношении есть несколько ключей, и каждый атрибут является частью хотя бы одного ключа (в частности, <tex>\mathrm{CourseId}, \mathrm{Phone}</tex> &ndash это ключ), тогда как первые три НФ не накладывают никакие ограничения на ключевые атрибуты. == Нормальная форма Бойса-Кодда == {{Определение|definition=Отношение находится в '''нормальной форме Бойса--Кодда''' (НФБК) тогда и только тогда, когда* оно находится в третьей нормальной форме* для любой нетривиальной функциональной зависимости <tex>X \rightarrow Y</tex>, <tex>X</tex> является надключом}} совершенная нормальная Нормальная формаБойса-Кодда исправляет аномалии, возникающие из-за перекрывающихся ключей. В частности, если учитывать отношение находится в 3НФ и в нем нет перекрывающихся ключей, оно автоматически находится в НФБК. Поскольку, опираясь только на функциональные зависимости, нельзя потребовать более сильное условие, чем надключ в левой части каждой ФЗ, то нФБК &ndash; "совершенная" НФ с точки зрения только функциональных зависимостей. === Запрещенные конструкции === В НФБК запрещены функциональныезависимости от наборов атрибутов, не являющихся надключами. В качестве примера возьмем отношение, расмотренное в секции "Аномалии" третьей нормальной формы. === Приведение в НФБК === Как и в случае с предыдущими двумя нормальными формами, приведение в НФБК осуществляется с помощью декомпозиций по функциональным зависимостям, нарушающим условие из определения НФБК. На рассматриваемом примере только в отношении <tex>\mathrm{Examiner} \leftrightarrow \mathrm{Phone}</tex> ни одна из частей не является надключом, поэтому делаем по нему декомпозицию. В данном случае не имеет значения, рассматривать ли зависимость в правую сторону или в левую, поэтому для примера будем использовать <tex>\mathrm{Examiner} \rightarrow \mathrm{Phone}</tex>. Получаем отношения{| class="wikitable"! CourseId || Group || Examiner|-| 1 || M3239 || Корнеев Г. А.|-| 4 || M3439 || Корнеев Г. А.|-| 1 || M3238 || Ведерников Н. В.|-| 2 || M3439 || Киракозов А. Х.|}{| class="wikitable"! Examiner || Phone|-| Корнеев Г. А. || 111-11-11|-| Ведерников Н. В. || 222-22-22|-| Киракозов А. Х. || 333-33-33|} После приведения в НФБК свойство независимости не связанных друг с другом напрямую данных теперь распространяется и на ключевые атрибуты, что позволяет полностью исплючить аномалии изменения. === Достижимость === {{Теорема|statement=Любое отношение может быть декомпозировано на отношения в НФБК|proof=* пока есть ФЗ, но не многозначные удовлетворяющие определению НФБК (в том числе определениям более слабых НФ), делаем декомпозицию* инвариант: количество атрибутов в каждом отношении строго уменьшается* в конце останутся либо отношения из двух атрибутов, которые всегда удовлетворяют НФБК, либо отношения, в которых нет неудовлетворяющих зависимостей, которые находятся в НФБК по определению}} '''Замечание.''' Несмотря на то, что любое отношение можно привести в НФБК, иногда при этом могут "распадаться" функциональные зависимости. Так, например, если рассмотреть отношение, в котором на каждой кафедре конкретный предмет читается только одним преподавателем, и никаким преподавателем не читается два разных предмета, можно обнаружить, что при проведении декомпозии, первая ФЗ (<tex>\mathrm{Dept}, \mathrm{Course} \rightarrow \mathrm{Lecturer}</tex>) распадается, так как части ключа оказываются в разных отношениях. '''Замечание 2.''' Всегда можно привести отношение к 3НФ, сохранив все ФЗ, если производить декомпозиции в правильном порядке. === Аномалии === В НФБК не может быть аномалий, связанных с функциональными зависимостями, так как на них наложено самое сильное ограничение. Однако есть более сложные виды зависимостей и аномалий. Так, [[Многозначные_зависимости_и_четвертая_нормальная_форма|аномалии многозначных зависимостей исправляются четвертой НФ]], а [[Зависимости_соединения_и_пятая_нормальная_форма|аномалии зависимостей соединения исправляются пятой НФ]].
12
правок

Навигация