Друга нормальна форма (2НФ, 2NF) — нормальна форма, що використовується для нормалізації баз даних. 2НФ первісно була визначена 1971 року Едгаром Коддом.[1] Щоб перебувати в другій нормальній формі, таблиця, що перебуває в першій нормальній формі, має відповідати додатковим критеріям. А саме: 1НФ таблиця перебуватиме в 2НФ тоді й лише тоді, коли для будь-якого потенційного ключа K і будь-якого атрибута A, який не є частиною потенційного ключа, A залежить саме від цілого потенційного ключа, а не від його частини.
Тобто, 1НФ таблиця перебуває в 2НФ тоді й тільки тоді, коли всі її неключові атрибути функціонально залежні від потенційного ключа в цілому.
У разі, якщо 1НФ таблиця не має складних потенційних ключів (таких, що складаються більш ніж з одного атрибута), тоді вона автоматично перебуватиме в 2НФ.
Приклад
Розглянемо таблицю, що описує вміння працівників:
Вміння працівників
Працівник |
Вміння |
Поточне місце роботи
|
Палій |
Друкування |
Бузковий провулок, 7
|
Палій |
Стенографія |
Бузковий провулок, 7
|
Палій |
Мосяжництво |
Бузковий провулок, 7
|
Сірко |
Гончарство |
Проспект Троянд, 49
|
Мамай |
Алхімія |
Проспект Троянд, 49
|
Мамай |
Пілотування |
Проспект Троянд, 49
|
Богун |
Гончарство |
Проспект Троянд, 49
|
Ані {Працівник} ані {Вміння} не є потенційними ключами для таблиці. «Працівник» може мати декілька вмінь, а «Вміння» може з'являтись у більше ніж одного Працівника. Саме складний ключ {Працівник, Вміння} підходить як потенційний ключ для таблиці.
Інші атрибути, «Поточне місце роботи», залежні від частини потенційного ключа, від Працівника. Тобто таблиця не в 2НФ. Існує надлишковість у представленні атрибута «Поточне місце роботи»: тричі повторюється те, що Палій працює на Бузковому провулку, 7, і двічі, що Мамай працює на проспекті Троянд, 49. Ця надлишковість робить таблицю вразливою для аномалій оновлення: це, наприклад, можливість оновити місце роботи Палія на його записах про «Друкування» і «Стенографію» і не оновити запис про «Мосяжництво». Отримані дані будуть припускати суперечливі відповіді на питання «Де працює Палій?»
Варіант у 2НФ для цього набору даних буде містити дві таблиці: «Працівник» з потенційним ключем {Працівник}, «Вміння працівників» з потенційним ключем {Працівник, Вміння}:
Працівник
Працівник
|
Поточне місце роботи
|
Палій
|
Бузковий провулок, 7
|
Сірко
|
Проспект Троянд, 49
|
Мамай
|
Проспект Троянд, 49
|
Богун
|
Проспект Троянд, 49
|
Вміння працівників
Працівник |
Вміння
|
Палій |
Друкування
|
Палій |
Стенографія
|
Палій |
Мосяжництво
|
Сірко |
Гончарство
|
Мамай |
Алхімія
|
Мамай |
Пілотування
|
Богун |
Гончарство
|
Жодна з цих таблиць не постраждає від аномалій оновлення.
Однак, не всі таблиці в 2НФ унебезпечені від аномалій оновлення. Приклад таблиці в 2НФ, яка може постраждати від аномалій оновлення:
Переможець змагання
Змагання |
Рік |
Переможець |
Дата народження переможця
|
Співуче поле |
1998 |
Іван Швидкосвист |
14 березня 1977
|
Майстерня талантів |
1998 |
Степан Гуцало |
21 липня 1975
|
Осінній лист |
1999 |
Яромир Грабар |
28 вересня 1968
|
День вареників |
1999 |
Степан Гуцало |
21 липня 1975
|
Вище неба |
1999 |
Іван Швидкосвист |
14 березня 1977
|
Попри те, що «Переможець» і «Дата народження переможця» визначається через цілий ключ {Змагання / Рік} і не є його частиною, саме поєднання «Переможець» / «Дата народження переможця» створює надлишковість. Це призводить до аномалій оновлення: якщо оновлення не потурбувалось про цілісність, можемо отримати переможця з двома різними датами народження.
Проблема полягає в транзитивній залежності атрибута «Дата народження переможця». «Дата народження переможця» залежить від «Переможець», який в свою чергу залежить від ключа.
Проблема адресована до третьої нормальної форми (3НФ).
2НФ і потенційні ключі
Таблиці, в яких немає часткових функціональних залежностей від первинного ключа зазвичай, але не завжди, знаходяться в 2НФ. У додаток до первинного ключа, таблиця може містити інші потенційні ключі; необхідно встановити, що немає неключових атрибутів, які мають часткову залежність від будь-якого потенційного ключа.
Кілька потенційних ключів зустрічаються в наступній таблиці:
Моделі електричних зубних щіток
Виробник |
Модель |
Повна назва |
Країна виробник
|
Forte |
X-Prime |
Forte X-Prime |
Італія
|
Forte |
Ultraclean |
Forte Ultraclean |
Італія
|
Dent-o-Fresh |
EZbrush |
Dent-o-Fresh EZBrush |
США
|
Kobayashi |
ST-60 |
Kobayashi ST-60 |
Японія
|
Hoch |
Toothmaster |
Hoch Toothmaster |
Німеччина
|
Hoch |
X-Prime |
Hoch X-Prime |
Німеччина
|
Навіть якщо проектувальник визначить первинний ключ як {Повна назва}, таблиця не в 2НФ. {Виробник, Модель} також потенційний ключ, і «Країна виробник» залежить від його підмножини «Виробник». Для переведення в 2НФ необхідно перейти до двох таблиць:
Виробники електричних зубних щіток
Виробник |
Країна виробник
|
Forte |
Італія
|
Dent-o-Fresh |
США
|
Kobayashi |
Японія
|
Hoch |
Німеччина
|
Моделі електричних зубних щіток
Виробник |
Модель |
Повна назва
|
Forte |
X-Prime |
Forte X-Prime
|
Forte |
Ultraclean |
Forte Ultraclean
|
Dent-o-Fresh |
EZbrush |
Dent-o-Fresh EZBrush
|
Kobayashi |
ST-60 |
Kobayashi ST-60
|
Hoch |
Toothmaster |
Hoch Toothmaster
|
Hoch |
X-Prime |
Hoch X-Prime
|
Примітки
- ↑ 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.
Посилання