Нормальная форма Бойса-Кодда (BCNF)

Всем привет! Сегодня мы с Вами подробно рассмотрим нормальную форму Бойса-Кодда (BCNF), в частности Вы узнаете, какие требования предъявляются к таблицам, чтобы база данных находилась в нормальной форме Бойса-Кодда (BCNF), и для наглядности мы как всегда рассмотрим пример.

Нормальная форма Бойса-Кодда (BCNF)

Между 3 и 4 нормальной формой есть еще и промежуточная нормальная форма, она называется – Нормальная форма Бойса-Кодда (BCNF). Иногда ее еще называют «Усиленная третья нормальная форма». Промежуточной или усиленной третьей нормальной формой ее называют потому, что ситуации, в которых могут предъявляться требования нормальной формы Бойса-Кодда, возникают не всегда, т.е. это некий частный случай, именно поэтому данная форма не включена в основную градацию. Однако во всех источниках эта форма рассматривается, поэтому и мы ее тоже рассмотрим.

Перед тем как переходить к процессу приведения таблиц базы данных до нормальной формы Бойса-Кодда, необходимо, чтобы эти таблицы уже находились в третьей нормальной форме, подробно процесс приведения таблиц базы данных до третьей нормальной формы, а также все требования, предъявляемые к третьей нормальной форме мы рассматривали в предыдущей статье – третья нормальная форма (3NF).

После того как таблицы базы данных находятся в третьей нормальной форме, мы можем начинать приводить базу данных к нормальной форме Бойса-Кодда и рассматривать соответствующие требования.

Требования нормальной формы Бойса-Кодда

Требования нормальной формы Бойса-Кодда следующие:

  • Таблица должна находиться в третьей нормальной форме. Здесь все как обычно, т.е. как и у всех остальных нормальных форм, первое требование заключается в том, чтобы таблица находилась в предыдущей нормальной форме, в данном случае в третьей нормальной форме;
  • Ключевые атрибуты составного ключа не должны зависеть от неключевых атрибутов.

Отсюда следует, что требования нормальной формы Бойса-Кодда предъявляются только к таблицам, у которых первичный ключ составной. Таблицы, у которых первичный ключ простой, и они находятся в третьей нормальной форме, автоматически находятся и в нормальной форме Бойса-Кодда.

Главное правило нормальной формы Бойса-Кодда (BCNF) звучит следующим образом:

Часть составного первичного ключа не должна зависеть от неключевого столбца.

Пример приведения таблиц базы данных к нормальной форме Бойса-Кодда

Представим, что у нас есть организация, которая реализует множество различных проектов. При этом в каждом проекте работа ведётся по нескольким функциональным направлениям, в каждом из которых есть свой куратор. Сотрудник может быть куратором только того направления, на котором он специализируется, т.е. если сотрудник программист, он не может курировать в проекте направление, связанное с бухгалтерией.

Допустим, что нам нужно хранить информацию о кураторах всех проектов по каждому направлению.

В итоге мы реализуем следующую таблицу, в которой первичный ключ составной «Проект + Направление», так как в каждом проекте есть несколько направлений работы и поэтому, зная только проект, мы не можем определить куратора направления, так же как зная только направление, мы не сможем определить куратора, нам нужно знать и проект и направление, чтобы определить куратора этого направления в этом проекте.

Таблица проектов и кураторов.

Проект Направление Куратор
1 Разработка Иванов И.И.
1 Бухгалтерия Сергеев С.С.
2 Разработка Иванов И.И.
2 Бухгалтерия Петров П.П.
2 Реализация John Smith
3 Разработка Андреев А.А.

Наша таблица находится в третьей нормальной форме, так как у нас есть первичный ключ, а неключевой столбец зависит от всего ключа, а не от какой-то его части.

Заметка! FULL JOIN в MySQL – не поддерживается, как реализовать?

Но в данном случае таблица не находится в нормальной форме Бойса-Кодда, дело в том, что зная куратора, мы можем четко определить, какое направление он курирует, иными словами, часть составного ключа, т.е. «Направление», зависит от неключевого атрибута, т.е. «Куратора».

Чтобы привести данную таблицу к нормальной форме Бойса-Кодда, необходимо, как всегда сделать декомпозицию данного отношения, т.е. разбить эту таблицу на несколько таблиц.

Таблица кураторов.

Идентификатор куратора ФИО Направление
1 Иванов И.И. Разработка
2 Сергеев С.С. Бухгалтерия
3 Петров П.П. Бухгалтерия
4 John Smith Реализация
5 Андреев А.А. Разработка

Таблица связи кураторов и проектов.

Проект Идентификатор куратора
1 1
1 2
2 1
2 3
2 4
3 5

Таким образом, в таблице кураторов у нас хранится список кураторов и их специализация, т.е. направление, которое они могут курировать, а в таблице связи кураторов и проектов отражается связь проектов и кураторов.

Заметка! Если Вас интересует язык SQL, рекомендую пройти мой авторский онлайн-курс по основам SQL, который ориентирован на изучение SQL как стандарта, после прохождения курса Вы сможете писать SQL запросы в любой системе управления базами данных. Курс включает много практики: онлайн-тестирование, задания и многое другое.

После того как мы привели таблицы базы данных к нормальной форме Бойса-Кодда (BCNF), мы можем переходить к приведению таблиц до следующей нормальной формы, в частности до четвертой нормальной формы (4NF). Описание, требования и пример приведения таблиц до четвертой нормальной формы мы рассмотрим в следующем материале.

Заметка! Четвертая нормальная форма (4NF) базы данных.

На сегодня это все, надеюсь, материал был Вам полезен, пока!

Понравилась статья? Поделиться с друзьями:
Заметки IT специалиста
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:
Нажимая на кнопку «Отправить комментарий», я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.