Всем привет! Сегодня мы с Вами подробно рассмотрим нормальную форму Бойса-Кодда (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 рассматривается как стандарт, чтобы после прочтения данной книги можно было работать с языком SQL в любой системе управления базами данных.
После того как мы привели таблицы базы данных к нормальной форме Бойса-Кодда (BCNF), мы можем переходить к приведению таблиц до следующей нормальной формы, в частности до четвертой нормальной формы (4NF). Описание, требования и пример приведения таблиц до четвертой нормальной формы мы рассмотрим в следующем материале.
На сегодня это все, надеюсь, материал был Вам полезен, пока!