Третя нормальна форма

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

Третя нормальна форма (3НФ) — нормальна форма використовна в нормалізації баз даних. 3НФ первісно була визначена Едгаром Коддом в 1971.[1] Визначення: Кодд каже, що таблиця знаходиться в 3НФ тоді і тільки тоді, коли виконуються наступні умови:

  • Відношення R (таблиця) знаходиться в 2НФ
  • Кожен неключовий атрибут відношення R нетранзитивно залежить (тобто залежить безпосередньо) від кожного потенційного ключа в R.

Неключовий атрибут R — атрибут, що не є частиною будь-якого потенційного ключа.[2] Транзитивною називають таку функціональну залежність, в якій XZ (X визначає Z) непрямо, а через XY і YZ (і невірно, що YX).[3]

Інше визначення 3НФ тотожне до визначення Кодда, дав Карло Заніоло в 1982. Це визначення стверджує, що таблиця в 3НФ тоді і тільки тоді, коли для кожної її функціональної залежності XA, вірна хочаб одна з наступних умов:

  • X містить A (тоді XA це тривіальна функціональна залежність), або
  • X це суперключ, або
  • A-X, різниця множин A і X це ключовий атрибут (тобто, A-X міститься в потенційному ключі)[4]

Визначення Заніоло вносить ясність врізниці між 3НФ і строгішою нормальною формою Бойса-Кодда. НФБК просто виключає третій варіант («A це ключовий атрибут»).

"Нічого окрім ключа"[ред.ред. код]

Вікопомне підсумкове визначення Кодда 3НФ було дане Біллом Кентом: кожен неключовий атрибут «має надавати факт про ключ, цілий ключ, і ні про що окрім ключа.»[5] Часто це визначення доповнюють клятвою: «тож допоможи мені Кодд» (використовується схожість звучання Кодд (англ. Codd) і Бог (англ. God) анлійською).[6]

Вимога, щоб неключовий атрибут знаходився в залежності від «цілого ключа», гарантує, що таблиця знаходиться в 2НФ; наступна вимога, щоб неключові атрибути були залежні від «нічого окрім ключа», гарантує, що таблиця знаходиться в 3НФ.

Крістофер Дейт згадував підсумок Кента, як «інтуїтивно привабливу характеризацію» 3НФ, і зауважував, що з невеличкою адаптацією він може слугувати, як визначення трошки сильнішої нормальної форми Бойса-Кодда: «Кожен атрибут має уособлювати факт про ключ, про цілий ключ, і нічого окрім ключа.»[7] Версія визначення для 3НФ слабша за варіант Дейта для БКНФ, бо попередня забезпечує гарантію залежності від ключів лише для неключових атрибутів. Ключові атрибути (які є ключами або їх частиною) мають бути вільними від функціональної залежності взагалі; кожен з них подає факт про ключ в сенсі надання частини ключа або цілого ключа. (Тут треба зауважити, що це правило застосовується тільки для функціонально залежних атрибутів, застосування його до всіх атрибутів спричинить неявну заборону складних потенційних ключів, бо кожна частина такого ключа буде порушувати умову «цілого ключа».)

Приклад таблиці в 2НФ, що порушує вимоги 3НФ:

Переможець змагання
Змагання Рік Переможець Дата народження переможця
Вище неба 1998 Степан Гуцало 21 липня 1975
Осінній лист 1999 Яромир Грабар 28 вересня 1968
День вареників 1999 Степан Гуцало 21 липня 1975
Вище неба 1999 Іван Швидкосвист 14 березня 1977

Через те, що кожний рядок таблиці має сказати нам, хто виграв конкретне змагання конкретного року, складний ключ {Змагання, Рік} - це найменший набір атрибутів, який гарантовано визначає рядок. Тобто, {Змагання, Рік} є потенційним ключем для цієї таблиці.

Таблиця не знаходиться в 3НФ, бо неключовий атрибут «Дата народження переможця» транзитивно залежить від потенційного ключа {Змагання, Рік} через неключовий атрибут «Переможець». Функціональна залежність «Дата народження переможця» від «Переможець» призводить до логічних несумісностей, в цій таблиці ніщо не заважає одній особі мати дві дати народження в різних записах.

В порядку відображення цього факту без порушення 3НФ, необхідно розбити таблицю на дві:

Переможець змагання
Змагання Рік Переможець
Вище неба 1998 Степан Гуцало
Осінній лист 1999 Яромир Грабар
День вареників 1999 Степан Гуцало
Вище неба 1999 Іван Швидкосвист
Дата народження гравців
Гравець Дата народження
Степан Гуцало 21 липня 1975
Яромир Грабар 28 вересня 1968
Іван Швидкосвист 14 березня 1977


Аномалії оновлення не можуть статися в цих таблицях, бо обидві в 3НФ.

Отримання умов Заніоло[ред.ред. код]

Визначення 3НФ запропоноване Карло Заніоло в 1982, доводиться наступним чином: Нехай X → A нетривіальна функціональна залежність (тобто X не містить A) і нехай A неключовий атрибут. Також нехай Y буде ключем для R. Тоді Y → X. Отже A не транзитивно залежить від Y тоді і тільки тоді, коли X → Y, тобто, тоді і тільки тоді, коли X —суперключ.[8]

Примітки[ред.ред. код]

  1. Codd, E.F. "Further Normalization of the Data Base Relational Model." (Presented at Courant Computer Science Symposia Series 6, "Data Base Systems," New York City, May 24th–25th, 1971.) IBM Research Report RJ909 (August 31st, 1971). Republished in Randall J. Rustin (ed.), Data Base Systems: Courant Computer Science Symposia Series 6. Prentice-Hall, 1972.
  2. Codd, p. 43.
  3. Codd, p. 45–46.
  4. Zaniolo, Carlo. "A New Normal Form for the Design of Relational Database Schemata." ACM Transactions on Database Systems 7(3), September 1982.
  5. Kent, William. "A Simple Guide to Five Normal Forms in Relational Database Theory", Communications of the ACM 26 (2), Feb. 1983, pp. 120–125.
  6. The author of a 1989 book on database management credits one of his students with coming up with the "so help me Codd" addendum. Diehr, George. Database Management (Scott, Foresman, 1989), p. 331.
  7. Date, C.J. An Introduction to Database Systems (7th ed.) (Addison Wesley, 2000), p. 379.
  8. Zaniolo, p. 494.

Посилання[ред.ред. код]