Четверта нормальна форма (4НФ) — нормальна форма застосовна в нормалізації баз даних. Введена Рональдом Фейджином в 1977. 4НФ — наступний рівень нормалізації після нормальної форми Бойса — Кодда. Тоді як друга, третя, і нормальна форма Бойса — Кодда опікуються функціональною залежністю, 4НФ опікується загальнішим типом залежності, відомим як багатозначна залежність. Таблиця перебуває в 4НФ тоді й лише тоді, коли для кожної її багатозначної залежності X →→ Y, X — суперключ, тобто X або потенційний ключ, або його надмножина."A relation schema R* is in fourth normal form (4NF) if, whenever a nontrivial multivalued dependency X →→ Y holds for R*, then so does the functional dependency X → A for every column name A of R*. Intuitively all dependencies are the result of keys."
Приклад Розглянемо такий приклад:
+ Райони доставки вареників Корчма Тип вареників Район доставкиТарас БульбаІз сиромМолдаванкаТарас БульбаІз сиромТаїровоТарас БульбаІз сиромЦентрТарас БульбаЗ вишнямиМолдаванкаТарас БульбаЗ вишнямиТаїровоТарас БульбаЗ вишнямиЦентрЗа рогомЗ грибами ЦентрЗа рогомЗ вишнямиЦентрТяжкі пропойціІз сиромМолдаванкаТяжкі пропойціІз сиромТаїровоТяжкі пропойціЗ грибамиМолдаванкаТяжкі пропойціЗ грибамиТаїрово
Кожний рядок показує куди корчма може доставити певний тип вареників.
В таблиці відсутні неключові атрибути, бо єдиний ключ це {Корчма, Тип вареників, Район доставки}. Тож таблиця знаходиться в усіх нормальних формах до НФБК. Однак, якщо ми припустимо, що типи вареників пропоновані рестораном не залежать від району доставки, тоді таблиця не знаходиться в 4НФ. Проблема в тому, що таблиця має дві нетривіальні багатозначні залежності від атрибута «Корчма» (який не є суперключем). Залежності такі:
{Корчма} →→ {Тип вареників} {Корчма} →→ {Район доставки}
Ці нетривіальні багатозначні залежності на неключовому атрибуті відображають факт незалежності типів вареників, що пропонує корчма від районів в яких здійснюється доставка цією корчмою. Це призводить до надлишковості в таблиці: наприклад, ми тричі кажемо, що корчма «Тарас Бульба» пропонує варениками з вишнями, і якщо корчма «Тарас Бульба» почне пропонувати вареники з квасолею тоді нам буде необхідно додати декілька рядків, по одному для кожного району доставки. Навіть більше, нічого не заважає нам зробити це невірно: ми можемо додати рядки вареників з квасолею для всіх районів крім одного, звідси помилка багатозначної залежності {Корчма} →→ {Тип вареників}.
Для унеможливлення цих аномалій, ми маємо розмістити дані про типи пропонованих вареників в різні таблиці із даними про райони доставки, створивши дві таблиці, обидві в 4НФ:
+ Різновиди в ресторанах Корчма Тип варениківТарас БульбаІз сиромТарас БульбаЗ вишнямиЗа рогомЗ грибамиЗа рогомЗ вишнямиТяжкі пропойціІз сиромТяжкі пропойціЗ грибами + Райони доставки ресторанів Корчма Район доставкиТарас БульбаМолдаванкаТарас БульбаТаїровоТарас БульбаЦентрЗа рогомЦентрТяжкі пропойціМолдаванкаТяжкі пропойціТаїрово
На відміну від випадку, коли типи вареників пропоновані рестораном змінюються залежно від районів доставки, вихідна таблиця буде задовольняти умовам 4НФ.
Рональд Фейджин показав, що досягти виконання 4НФ можливо завжди.Fagin, p. 268 Теорема Ріссанена (про незалежність проєкцій) теж застосовна до багатозначних залежностей.
4НФ в практиці Стаття Маргарет Ву 1992 зауважує, що навчання з нормалізації баз даних зазвичай завершують безпосередньо перед 4НФ, можливо, через віру в те, що таблиці не в 4НФ (але такі, що знаходяться в попередніх) рідко зустрічаються в бізнес застосунках. А втім, ця віра може бути не точною. Ву звітує, що при вивченні сорока баз даних організацій, понад 20% містили одну або більше таблиць, що порушували 4НФ і при цьому відповідали умовам усіх нижніх форм.
Примітки