JavaRush /Курси /SQL SELF /Принципи другої нормальної форми (2NF)

Принципи другої нормальної форми (2NF)

SQL SELF
Рівень 25 , Лекція 2
Відкрита

Таблиця вважається такою, що знаходиться у другій нормальній формі, якщо:

  1. Вона вже знаходиться у першій нормальній формі (1NF).
  2. Кожна неключова колонка залежить від усього первинного ключа, а не тільки від частини ключа.

Якщо первинний ключ складається з кількох полів (складений ключ), то жоден з неключових атрибутів (стовпців) не повинен залежати лише від однієї частини цього ключа. Іншими словами, 2NF прибирає часткові залежності.

Приклад порушення 2NF

Припустимо, у нас є таблиця student_courses (Студенти і Курси), яка зберігає інформацію про студентів, їх курси та викладачів:

student_id course_id course_name instructor_name
1 101 Математика Lin
1 102 Література Song
2 101 Математика Lin
  • student_id і course_id разом утворюють складений первинний ключ.
  • Але зверни увагу на колонки course_name і instructor_name. Вони залежать тільки від course_id, а не від всієї пари (student_id, course_id).

Ось вона, часткова залежність! course_name і instructor_name залежать лише від частини складеного ключа (course_id). Це порушення принципів 2NF.

Приведення таблиці до 2NF

Наша задача — прибрати часткову залежність, розділивши таблицю на дві. Це позбавить нас надлишковості й покращить узгодженість даних.

Виділимо інформацію про курси в окрему таблицю courses:

course_id course_name instructor_name
101 Математика Lin
102 Література Song

Основну таблицю зведемо до такого вигляду:

student_id course_id
1 101
1 102
2 101

Тепер кожна колонка залежить від усього первинного ключа. Ми розділили дані так, щоб вся інформація була логічно пов’язана, і прибрали порушення 2NF.

Магія усунення надлишковості

Зверни увагу на таблицю до нормалізації. У колонці instructor_name повторюється ім’я "Lin". А скільки таких повторів може бути у реальній базі з тисячами записів? Розділивши таблиці, ми прибрали надлишковість і зменшили ймовірність помилок, наприклад, опечаток ("Lin" vs "Ling").

Приклад з життя

Уяви, що ти ведеш облік замовлень на товари. У тебе є така таблиця order_items (замовлення і товари), де order_id і item_id складають первинний ключ:

order_id item_id item_name price
1 101 Лептоп 50000
1 102 Миша 1000
2 101 Лептоп 50000

Як бачиш, ціни й назви товарів повторюються. Це ознака порушення 2NF, бо item_name і price залежать тільки від item_id.

Щоб привести таблицю до 2NF, створимо таблицю items:

item_id item_name price
101 Лептоп 50000
102 Миша 1000

І змінимо таблицю order_items, залишивши тільки ідентифікатори замовлення і товару:

order_id item_id
1 101
1 102
2 101

Тепер дані чисті, як код після рев’ю — жодної надлишковості.

Практичне завдання: спробуй сам!

Нехай у тебе є таблиця employee_projects, що містить інформацію про співробітників, їх проекти та менеджерів проектів:

employee_id project_id project_name manager_name
1 201 CRM Upgrade Lin
2 202 Website Revamp Ming
1 202 Website Revamp Ming

Спробуй:

  1. Знайти залежності, які порушують вимоги 2NF.
  2. Розділити таблицю на дві, прибравши порушення.

Чому важливо дотримуватись 2NF?

Навіщо взагалі дотримуватись другої нормальної форми (2NF)? Все просто: щоб дані не дублювались і не створювали плутанину. Коли ти прибираєш часткові залежності, таблиці стають чистішими — без повторюваної інформації, типу одного й того ж імені викладача в кожному рядку. Це економить місце і позбавляє ризику неузгодженостей: оновив ім’я в одному місці — і все одразу актуально.

До того ж, запити до такої бази писати простіше: коли структура логічна і дані не розмазано по купі рядків, фільтрація і групування працюють швидше й надійніше. Так, за це доведеться платити трохи складнішими SQL-запитами з JOIN-ами, бо таблиць стає більше. Але все ж краще один JOIN, ніж сто рядків з одними й тими ж прізвищами. У більшості випадків нормалізація того варта.

Інтеграція з реальними проектами

Знання 2NF стане у пригоді тобі:

  • Під час проєктування бази даних: допомагаючи уникнути хаосу в таблицях.
  • На співбесіді: часто просять пояснити або привести таблиці до нормальної форми.
  • У реальній роботі: коли тобі довірять оптимізацію існуючої бази даних, розбивши "монолітні" таблиці на нормалізовані.

Друга нормальна форма (2NF) допомагає прибрати часткові залежності в таблиці, де первинний ключ є складеним. Ми розбиваємо таблиці на логічні блоки, щоб кожна колонка залежала тільки від усього ключа, а не від його частини. Це покращує якість бази даних, прибирає надлишковість і підвищує її гнучкість. Готовий до третьої нормальної форми? Погнали далі!

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ