WikiSort.ru - Не сортированное

ПОИСК ПО САЙТУ | о проекте

Нормальная форма Бойса — Кодда (сокращённо BCNF от англ. Boyce–Codd normal form) — одна из возможных нормальных форм отношения в реляционной модели данных.

Иногда нормальную форму Бойса — Кодда называют усиленной третьей нормальной формой, поскольку она во всех отношениях сильнее (строже) по сравнению с ранее определённой 3НФ[1].

Названа в честь Рэя Бойса и Эдгара Кодда, хотя Кристофер Дейт указывает, что на самом деле строгое определение «третьей» нормальной формы, эквивалентное определению нормальной формы Бойса — Кодда, впервые было дано Иэном Хитом (англ. Ian Heath) в 1971 году, поэтому данную форму следовало бы называть «нормальной формой Хита»[1].

Определение

Переменная отношения находится в BCNF тогда и только тогда, когда каждая её нетривиальная и неприводимая слева функциональная зависимость имеет в качестве своего детерминанта некоторый потенциальный ключ[1].

Менее формально, переменная отношения находится в нормальной форме Бойса — Кодда тогда и только тогда, когда детерминанты всех её функциональных зависимостей являются потенциальными ключами.

Для определения BCNF следует понимать понятие функциональной зависимости атрибутов отношения.

Пусть R является переменной отношения, а X и Y — произвольными подмножествами множества атрибутов переменной отношения R. Y функционально зависимо от X тогда и только тогда, когда для любого допустимого значения переменной отношения R, если два кортежа переменной отношения R совпадают по значению X, они также совпадают и по значению Y. Подмножество X называют детерминантом, а Y — зависимой частью.

Функциональная зависимость тривиальна тогда и только тогда, когда её правая (зависимая) часть является подмножеством её левой части (детерминанта).

Функциональная зависимость называется неприводимой слева, если ни один атрибут не может быть опущен из её детерминанта без нарушения зависимости (иными словами, детерминант неизбыточен).

Ситуация, когда отношение будет находиться в 3NF, но не в BCNF, возникает, например, при условии, что отношение имеет два (или более) потенциальных ключа, которые являются составными, и между отдельными атрибутами таких ключей существует функциональная зависимость. Поскольку описанная зависимость не является транзитивной, то такая ситуация под определение 3NF не подпадает. На практике такие отношения встречаются достаточно редко, для всех прочих отношений 3NF и BCNF эквивалентны.

Пример

Предположим, рассматривается отношение, представляющее данные о бронировании теннисных кортов на день:

Бронирования кортов
Номер кортаВремя началаВремя окончанияТариф
109:3010:30«Корт 1 для членов клуба»
111:0012:00«Корт 1 для членов клуба»
114:0015:30«Корт 1 для не членов клуба»
210:0011:30«Корт 2 для не членов клуба»
211:3013:30«Корт 2 для не членов клуба»
215:0016:30«Корт 2 для членов клуба»

Таким образом, возможны следующие составные потенциальные ключи: {Номер корта, Время начала}, {Номер корта, Время окончания}, {Тариф, Время начала}, {Тариф, Время окончания}.

Отношение соответствует второй (2NF) и третьей (3NF) нормальной форме. Требования второй нормальной формы выполняются, так как все атрибуты входят в какой-то из потенциальных ключей, а неключевых атрибутов в отношении нет. Также нет и транзитивных зависимостей, что соответствует требованиям третьей нормальной формы. Тем не менее, существует функциональная зависимость Тариф → Номер корта, в которой левая часть (детерминант) не является потенциальным ключом отношения, то есть отношение не находится в нормальной форме Бойса — Кодда.

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

Можно улучшить структуру с помощью декомпозиции отношения на два, получив отношения, удовлетворяющие BCNF (подчёркнуты атрибуты, входящие в первичный ключ). Для большей наглядности к информации о тарифах добавлен атрибут Для членов клуба:

Тарифы
ТарифНомер кортаДля членов клуба
«Корт 1 для членов клуба»1Да
«Корт 1 для не членов клуба»1Нет
«Корт 2 для членов клуба»2Да
«Корт 2 для не членов клуба»2Нет
Бронирования
ТарифВремя началаВремя окончания
«Корт 1 для членов клуба»09:3010:30
«Корт 1 для членов клуба»11:0012:00
«Корт 1 для не членов клуба»14:0015:30
«Корт 2 для не членов клуба»10:0011:30
«Корт 2 для не членов клуба»11:3013:00
«Корт 2 для членов клуба»15:0016:30

Примечания

  1. 1 2 3 Дейт К. Дж. Введение в системы баз данных. — 8-е изд. — М.: «Вильямс», 2006

Литература

Российская

Переводная

Иностранная

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии