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

pic

Що таке нормалізація баз даних?

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

Цілі нормалізації

  1. Усунення надмірності: Уникнення збереження однакових даних у кількох місцях.
  2. Забезпечення цілісності даних: Підтримка узгодженості та точності даних.
  3. Спрощення управління даними: Полегшення вставки, оновлення та видалення даних без виникнення аномалій.

Нормальні форми (NF)

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

Перша нормальна форма (1NF)

Основні вимоги:

  1. Кожна клітинка таблиці повинна містити одне значення.
    Це означає, що в одній клітинці не може бути списку значень, масиву або будь-якої іншої структури даних. Наприклад, якщо у вас є колонка “Телефони”, і ви зберігаєте кілька номерів через кому, це порушує 1NF. Замість цього кожен номер телефону повинен бути в окремому рядку.
  2. Кожен запис повинен бути унікальним.
    Це означає, що кожен рядок у таблиці повинен мати унікальний ідентифікатор (первинний ключ, primary key). Первинний ключ може складатися з одного або кількох стовпців, але він повинен гарантувати, що жодні два рядки не будуть однаковими.
  • Приклад: У таблиці “Клієнти” може бути стовпець customer_id, який є унікальним для кожного клієнта.
  • Уточнення: Унікальними мають бути рядки, а не всі колонки. Тобто, якщо у вас є 3 колонки, то унікальним має бути первинний ключ (наприклад, customer_id), а не всі колонки. Інші колонки можуть містити дублікати.

Друга нормальна форма (2NF)

Основні вимоги:

  1. Таблиця повинна бути в 1NF.
    Це означає, що всі вимоги 1NF повинні бути виконані.
  2. Всі неключові атрибути повинні залежати від усього первинного ключа.
  • Якщо первинний ключ складається з одного стовпця, то всі інші стовпці повинні залежати від нього.
  • Якщо первинний ключ складається з кількох стовпців (складений ключ), то кожен неключовий атрибут повинен залежати від всього ключа, а не від його частини.
  • Приклад: У таблиці “Замовлення товарів” зі стовпцями order_id, product_id і quantity, первинний ключ може бути складений (order_id, product_id). Стовпець quantity залежить від обох частин ключа, тому таблиця відповідає 2NF.

Третя нормальна форма (3NF)

Основні вимоги:

  1. Таблиця повинна бути в 2NF.
    Всі вимоги 2NF повинні бути виконані.
  2. Не повинно бути транзитивної залежності.
    Це означає, що неключові атрибути не повинні залежати від інших неключових атрибутів. Вони повинні залежати виключно від первинного ключа.
  • Приклад: У таблиці “Замовлення” зі стовпцями order_id, customer_id, customer_name, customer_address, стовпці customer_name і customer_address залежать від customer_id, а не від order_id. Це порушує 3NF. Щоб виправити це, потрібно винести дані про клієнта в окрему таблицю.

Нормальна форма Бойса-Кодда (BCNF)

Основні вимоги:

  1. Таблиця повинна бути в 3NF.
    Всі вимоги 3NF повинні бути виконані.
  2. Кожен детермінант повинен бути кандидатом на ключ.
  • Детермінант — це стовпець або набір стовпців, які визначають значення інших стовпців.
  • У BCNF вимагається, що будь-який детермінант (стовпець, який визначає інші стовпці) повинен бути потенційним ключем (кандидатом на первинний ключ).
  • Приклад: У таблиці “Викладачі” зі стовпцями teacher_id, subject, classroom, якщо subject визначає classroom, то subject повинен бути кандидатом на ключ. Якщо це не так, таблиця порушує BCNF.

Четверта нормальна форма (4NF)

Основні вимоги:

  1. Таблиця повинна бути в BCNF.
    Всі вимоги BCNF повинні бути виконані.
    2.
    Не повинно бути багатозначних залежностей.
  • Багатозначна залежність виникає, коли один стовпець може мати кілька значень, які залежать від іншого стовпця, але не пов’язані між собою.
  • Приклад: У таблиці “Студенти” зі стовпцями student_id, course, hobby, якщо студент може мати кілька курсів і кілька хобі, які не пов’язані між собою, це порушує 4NF. Щоб виправити це, потрібно розділити таблицю на дві: одну для курсів, іншу для хобі.

П’ята нормальна форма (5NF)

Основні вимоги:

  1. Таблиця повинна бути в 4NF.
    Всі вимоги 4NF повинні бути виконані.
  2. Не повинно бути залежностей від з’єднань.
  • Ця форма вирішує проблеми, коли дані можуть бути розділені на кілька таблиць, але при цьому зберігають свою цілісність лише при з’єднанні цих таблиць.
  • Приклад: У таблиці “Постачальники” зі стовпцями supplier_id, product_id, customer_id, якщо постачальник може поставляти продукт лише певному клієнту, це порушує 5NF. Щоб виправити це, потрібно розділити таблицю на дві: одну для постачальників і продуктів, іншу для продуктів і клієнтів.

Підсумок

  • 1NF: Кожна клітинка має містити одне значення, і кожен запис має бути унікальним (завдяки первинному ключу).
  • 2NF: Усі неключові атрибути залежать від усього первинного ключа.
  • 3NF: Немає транзитивних залежностей (неключові атрибути залежать лише від первинного ключа).
  • BCNF: Кожен детермінант є кандидатом на ключ.
  • 4NF: Немає багатозначних залежностей.
  • 5NF: Немає залежностей від з’єднань.

Ці нормальні форми допомагають уникнути надмірності, аномалій і забезпечують ефективне управління даними.

Що таке денормалізація бази даних?

Денормалізація — це процес навмисного введення надмірності у базу для покращення продуктивності читання. Це часто використовується в ситуаціях, коли операції читання важливіші за операції запису.

Коли використовувати денормалізацію

  1. Читання в пріоритеті: Коли база даних використовується переважно для запитів (наприклад, звіти, аналітика).
  2. Оптимізація продуктивності: Для зменшення кількості з’єднань, необхідних для складних запитів.
  3. Кешування: Попередній розрахунок та збереження агрегованих даних для пришвидшення запитів.

Недоліки денормалізації

  1. Збільшення обсягу зберігання: Надмірні дані займають більше місця на диску.
  2. Ризики цілісності даних: Оновлення та видалення можуть вимагати змін у кількох місцях, збільшуючи ризик несумісностей.
  3. Складність: Підтримка денормалізованих даних може ускладнити управління базою.

Перекладено з: Нормалізація та Денормалізація баз даних

Leave a Reply

Your email address will not be published. Required fields are marked *