Третя нормальна формаТретя нормальна форма (3НФ) — нормальна форма використовна в нормалізації баз даних. 3НФ первісно була визначена 1971 року Едгаром Коддом.[1] За Коддом таблиця знаходиться в 3НФ тоді й лише тоді, коли виконуються наступні умови:
Неключовий атрибут R — атрибут, що не є частиною будь-якого потенційного ключа.[2] Транзитивною називають таку функціональну залежність, в якій X → Z (X визначає Z) не прямо, а через X → Y і Y → Z (і неправильно, що Y → X).[3] Інше визначення 3НФ тотожне до визначення Кодда, 1982 року дав Карло Заніоло. Це визначення стверджує, що таблиця в 3НФ тоді й лише тоді, коли для кожної її функціональної залежності X → A, вірна хоча б одна з наступних умов:
Визначення Заніоло пояснює різницю між 3НФ і строгішою нормальною формою Бойса-Кодда. НФБК просто виключає третій варіант («A це ключовий атрибут»). Підсумкове визначенняПідсумкове визначення Кодда 3НФ було дане Біллом Кентом: кожен неключовий атрибут «має надавати факт про ключ, цілий ключ, і ні про що окрім ключа.»[5] Вимога, щоб неключовий атрибут знаходився в залежності від «цілого ключа», гарантує, що таблиця знаходиться в 2НФ; наступна вимога, щоб неключові атрибути були залежні від «нічого окрім ключа», гарантує, що таблиця знаходиться в 3НФ. Крістофер Дейт згадував підсумок Кента, як «інтуїтивно привабливу характеризацію» 3НФ, і зауважував, що з невеличкою адаптацією він може слугувати, як визначення трохи сильнішої нормальної форми Бойса-Кодда: «Кожен атрибут має уособлювати факт про ключ, про цілий ключ, і нічого окрім ключа.»[6] Версія визначення для 3НФ слабша за варіант Дейта для БКНФ, бо попередня забезпечує гарантію залежності від ключів лише для неключових атрибутів. Ключові атрибути (які є ключами або їх частиною) мають бути вільними від функціональної залежності взагалі; кожен з них подає факт про ключ в сенсі надання частини ключа або цілого ключа. (Це правило застосовується тільки для функціонально залежних атрибутів, застосування його до всіх атрибутів спричинить неявну заборону складних потенційних ключів, бо кожна частина такого ключа буде порушувати умову «цілого ключа».) Приклад таблиці в 2НФ, що порушує вимоги 3НФ:
Через те, що кожний рядок таблиці має сказати нам, хто виграв конкретне змагання конкретного року, складний ключ {Змагання, Рік} - це найменший набір атрибутів, який гарантовано визначає рядок. Тобто, {Змагання, Рік} є потенційним ключем для цієї таблиці. Таблиця не знаходиться в 3НФ, бо неключовий атрибут «Дата народження переможця» транзитивно залежить від потенційного ключа {Змагання, Рік} через неключовий атрибут «Переможець». Функціональна залежність «Дата народження переможця» від «Переможець» призводить до логічних несумісностей, у цій таблиці ніщо не заважає одній особі мати дві дати народження в різних записах. В порядку відображення цього факту без порушення 3НФ, необхідно розбити таблицю на дві:
Аномалії оновлення не можуть статися в цих таблицях, бо обидві в 3НФ. Отримання умов ЗаніолоВизначення 3НФ запропоноване Карло Заніоло в 1982, доводиться наступним чином: Нехай X → A нетривіальна функціональна залежність (тобто X не містить A) і нехай A неключовий атрибут. Також нехай Y буде ключем для R. Тоді Y → X. Отже A не транзитивно залежить від Y тоді і тільки тоді, коли X → Y, тобто, тоді і тільки тоді, коли X —суперключ.[7] Примітки
Посилання
|