Четвертая нормальная форма ( 4NF ) — это нормальная форма, используемая при нормализации базы данных . Введенная Рональдом Фейджином в 1977 году, 4NF является следующим уровнем нормализации после нормальной формы Бойса–Кодда (BCNF). В то время как вторая , третья и нормальная форма Бойса–Кодда связаны с функциональными зависимостями , 4NF связана с более общим типом зависимости, известным как многозначная зависимость . Таблица находится в 4NF тогда и только тогда , когда для каждой из ее нетривиальных многозначных зависимостей X Y X является суперключом — то есть X является либо потенциальным ключом , либо его надмножеством. [1]
Если заголовки столбцов в таблице реляционной базы данных разделены на три непересекающиеся группы X , Y и Z , то в контексте конкретной строки мы можем ссылаться на данные под каждой группой заголовков как на x , y и z соответственно. Многозначная зависимость X Y означает, что если мы выберем любой x , фактически встречающийся в таблице (назовем этот выбор x c ), и составим список всех комбинаций x c yz , которые встречаются в таблице, мы обнаружим, что x c связан с теми же записями y независимо от z . Таким образом, по сути, наличие z не дает полезной информации для ограничения возможных значений y .
Тривиальная многозначная зависимость X Y — это зависимость, в которой Y является подмножеством X или X и Y вместе образуют весь набор атрибутов отношения.
Функциональная зависимость — это частный случай многозначной зависимости. В функциональной зависимости X → Y каждый x определяет ровно один y , никогда больше одного.
Рассмотрим следующий пример:
Ресторан | Разнообразие пиццы | Зона доставки |
---|---|---|
А1 Пицца | Толстая корочка | Спрингфилд |
А1 Пицца | Толстая корочка | Шелбивилль |
А1 Пицца | Толстая корочка | Столица |
А1 Пицца | Фаршированная корочка | Спрингфилд |
А1 Пицца | Фаршированная корочка | Шелбивилль |
А1 Пицца | Фаршированная корочка | Столица |
Элитная пицца | Тонкая корочка | Столица |
Элитная пицца | Фаршированная корочка | Столица |
Пицца Винченцо | Толстая корочка | Спрингфилд |
Пицца Винченцо | Толстая корочка | Шелбивилль |
Пицца Винченцо | Тонкая корочка | Спрингфилд |
Пицца Винченцо | Тонкая корочка | Шелбивилль |
Каждая строка указывает, что данный ресторан может доставить данный сорт пиццы в данный район.
Таблица не имеет неключевых атрибутов, поскольку ее единственным потенциальным ключом является {Restaurant, Pizza variation, Delivery area}. Следовательно, она соответствует всем нормальным формам вплоть до BCNF. Однако если предположить, что разновидности пиццы, предлагаемые рестораном, не зависят от области доставки, или наоборот, что области доставки не зависят от разновидностей пиццы (т. е. ресторан предлагает все разновидности пиццы, которые он производит, во все области, которые он поставляет), то она не соответствует 4NF. Проблема в том, что таблица содержит две нетривиальные многозначные зависимости от атрибута {Restaurant} (который не является суперключом). Зависимости следующие:
Эти нетривиальные многозначные зависимости от не-суперключа отражают тот факт, что разновидности пиццы, предлагаемые рестораном, не зависят от областей, в которые ресторан осуществляет доставку. Такое положение дел приводит к избыточности в таблице: например, нам трижды сообщается, что A1 Pizza предлагает пиццу с начинкой, и если A1 Pizza начнет производить пиццу с сырной корочкой, то нам нужно будет добавить несколько строк, по одной для каждой области доставки A1 Pizza. Более того, ничто не мешает нам сделать это неправильно: мы можем добавить строки с сырной корочкой для всех областей доставки A1 Pizza, кроме одной, тем самым не соблюдая многозначную зависимость {Ресторан} {Разновидность пиццы}.
Чтобы исключить возможность возникновения таких аномалий, мы должны поместить факты о предлагаемых сортах в отдельную таблицу, нежели факты о районах доставки, получив в результате две таблицы, которые обе находятся в 4NF:
Ресторан | Разнообразие пиццы |
---|---|
А1 Пицца | Толстая корочка |
А1 Пицца | Фаршированная корочка |
Элитная пицца | Тонкая корочка |
Элитная пицца | Фаршированная корочка |
Пицца Винченцо | Толстая корочка |
Пицца Винченцо | Тонкая корочка |
Ресторан | Зона доставки |
---|---|
А1 Пицца | Спрингфилд |
А1 Пицца | Шелбивилль |
А1 Пицца | Столица |
Элитная пицца | Столица |
Пицца Винченцо | Спрингфилд |
Пицца Винченцо | Шелбивилль |
Напротив, если бы разновидности пиццы, предлагаемые рестораном, иногда действительно различались в зависимости от зоны доставки, то исходная таблица из трех столбцов удовлетворяла бы 4NF.
Рональд Фейгин продемонстрировал, что всегда возможно достичь 4NF. [2] Теорема Риссанена применима также к многозначным зависимостям .
В статье 1992 года Маргарет С. Ву отмечает, что преподавание нормализации баз данных обычно останавливается на 4NF, возможно, из-за убеждения, что таблицы, нарушающие 4NF (но соответствующие всем низшим нормальным формам), редко встречаются в бизнес-приложениях. Однако это убеждение может быть неточным. Ву сообщает, что в исследовании сорока организационных баз данных более 20% содержали одну или несколько таблиц, которые нарушали 4NF, но соответствовали всем низшим нормальным формам. [3]
Только в редких случаях таблица 4NF не соответствует высшей нормальной форме 5NF . Это ситуации, в которых сложное реальное ограничение, регулирующее допустимые комбинации значений атрибутов в таблице 4NF, не подразумевается в структуре этой таблицы.