Друга нормальна форма
Друга нормальна форма (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НФ. У додаток до первинного ключа, таблиця може містити інші потенційні ключі; необхідно встановити, що немає неключових атрибутів, які мають часткову залежність від будь-якого потенційного ключа.
Кілька потенційних ключів зустрічаються в наступній таблиці:
Виробник | Модель | Повна назва | Країна виробник |
---|---|---|---|
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.
- Базові знання з нормалізації баз даних [Архівовано 5 лютого 2007 у Wayback Machine.] Майк Чеппл (About.com). (англ.)
- Введення в нормалізацію баз даних Майк Хіллер. (англ.)
- Нормалізація ITS, University of Texas. (англ.)