Skip to content

Database design

Нормалізація баз даних

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

Щоб краще зрозуміти що це значить, розглянемо приклад. Нехай у нас є таблиця, у якій зберігається інформація про користувачів та міста, у яких вони живуть. У цій таблиці назва міста Київ вказана з помилкою (правильно буде Kyiv). Якщо ми захочемо виправити назву міста, нам прийдеться оновлювати інформацію для всіх користувачів, на що витратиться багато обчислювальних ресурсів. Окрім того, це оновлення, скоріше за все, займе деякий час, і поки воно відбуватиметься, база даних буде в некоректному стані, оскільки в одних користувачів назва міста буде написана Київ, а в інших — уже Kyiv. Нормалізація баз даних дозволяє уникнути таких ситуацій, а саме усунути повторення та небажані характеристики.

Виділяють три основні нормальні форми, кожна з яких допомагає розв'язати певні проблеми у структурі бази даних ⬇️

Перша нормальна форма

Перша нормальна форма (1НФ) вимагає, щоб усі значення в таблиці були атомарними, тобто неділимими. Іншими словами, будь-яке значення будь-якого стовпчика має містити лише одне значення. Іноді визначення 1НФ формують так: для того, щоб отримати готові до використання дані з будь-якого стовпчика таблиці, не потрібно виконувати додаткових обчислень.

Розглянемо приклад таблиці з інформацією про користувачів. У користувача може бути більше одного номеру телефону. Щоб отримати хоч якийсь номер, який можна використати, потрібно зчитати значення стовпчика Phone для користувача, і потім над значенням цього стовпчика виконати функцію split по комі. Якщо привести цю таблицю до першої нормальної форми, то у стовпчику Phone у кожному рядку буде зберігатись лише один номер телефону.

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

Друга нормальна форма (2НФ) досягається, коли таблиця вже є у 1НФ і додатково виконується ще одна умова: усі значення, які повторюються у межах рядка, виносяться в окрему таблицю.

Ще раз поглянемо на нашу таблицю з користувачами. Вона, по суті, містить телефони користувачів, а імена в ній повторюються. Якщо привести цю базу до 2НФ, то імена слід винести в окрему таблицю. Після такої трансформації у нас буде окрема таблиця з інформацією про користувачів та окрема таблиця з інформацією про їх телефони. У таблиці з телефонами замість повторюваних імен користувачів міститимуться лише їхні ідентифікатори.

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

Третя нормальна форма (3НФ) вимагає, щоб таблиця була у 2НФ і щоб дані в таблиці залежали тільки від основного ключа. Іншими словами, 3НФ вимагає, щоб у таблиці не було транзитивних залежностей.

Розглянемо приклад та уявимо, що в нашій базі даних також зберігається інформація про працівників магазину, які можуть працювати у різних відділах. У БД також зберігається інформація про офіс працівника, яка залежить від відділу. Відділ IT розташовується лише в офісі Kyiv-1, а відділ Accounting — лише в офісі Kyiv-2. Щоб привести таку таблицю до 3НФ, потрібно винести інформацію про офіси та їх розташування в окрему таблицю, а в таблиці з користувачами лише посилатись на інформацію про відділ.

Розуміння форм нормалізації дозволяє краще будувати бази даних та оптимізовувати їх роботу.