Перейти до вмісту

Друга нормальна форма

Матеріал з Вікіпедії — вільної енциклопедії.

Друга нормальна форма (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

Примітки

[ред. | ред. код]
  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.

Посилання

[ред. | ред. код]