Основи проєктування баз даних: Нормалізація та денормалізація

pic

Префація

Проєктування ефективної бази даних вимагає знаходження балансу між структурною організацією даних та операційними вимогами системи. Незалежно від того, чи прагнете ви усунути надмірність, покращити продуктивність запитів чи забезпечити надійне маніпулювання даними, розуміння нормалізації, денормалізації та їх взаємозв'язку з ACID властивостями є важливим.

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

Зміст

  1. Вступ
  2. Нормалізація
    a. Що таке нормалізація?
    b. Нормальні форми
    c. Переваги та недоліки
  3. Денормалізація
    a. Що таке денормалізація?
    b. Техніки
    c. Переваги та недоліки
  4. Нормалізація та денормалізація: ключові відмінності
  5. Нормалізація, денормалізація та ACID
    a. Як нормалізація підтримує ACID
    b. Виклики денормалізації в контексті ACID
  6. Практичні приклади
  7. Висновок

1. Вступ

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

2. Нормалізація

a. Що таке нормалізація?

Нормалізація структурує дані в менші, пов'язані таблиці для зменшення надмірності та покращення цілісності. Метою є мінімізація аномалій під час операцій з даними, таких як вставка, оновлення та видалення.

b. Нормальні форми

  1. Перша нормальна форма (1NF):
    Забезпечує, щоб усі стовпці містили атомарні (неділимі) значення та щоб у таблиці не було повторюваних груп чи масивів.
  2. Друга нормальна форма (2NF):
    Відповідає всім вимогам 1NF і усуває часткові залежності, забезпечуючи, щоб атрибути, що не є частиною первинного ключа, залежали від цілого первинного ключа, якщо він складений.
  3. Третя нормальна форма (3NF):
    Будує на основі 2NF, усуваючи транзитивні залежності, гарантуючи, що всі атрибути, що не є частиною первинного ключа, залежали тільки від нього.
  4. У базах даних транзитивна залежність виникає, коли один атрибут в таблиці залежить від іншого атрибута, що також залежить від первинного ключа.
  5. Форма Бойса-Кодда (BCNF):
    Розширює 3NF, забезпечуючи, що кожен детермінант (атрибут, який визначає інший атрибут) є кандидатним ключем.
  6. Четверта і п'ята нормальні форми (4NF, 5NF):
    Розглядають більш складні проблеми, такі як багатоцінні залежності (4NF) і залежності від з'єднання (5NF), додатково зменшуючи надмірність у складних схемах.

c. Переваги та недоліки

Переваги:

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

Недоліки:

  1. Збільшує складність запитів, оскільки нормалізовані схеми вимагають кількох з'єднань для отримання даних.
  2. Може призвести до накладних витрат на продуктивність в системах, орієнтованих на часті запити, які потребують значних ресурсів на обробку.

3. Денормалізація

a. Що таке денормалізація?

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

b. Техніки

  1. Об'єднання таблиць: Зменшення кількості з'єднань шляхом злиття пов'язаних таблиць.
  2. Додавання стовпців: Зберігання похідних даних або часто використовуваних полів.
  3. Використання таблиць пошуку: Попереднє зберігання часто запитуваних даних для швидшого доступу.

c. Переваги та недоліки

Переваги:
Покращує продуктивність читання, зменшуючи кількість з'єднань.
2. Спрощує запити в системах з високим навантаженням на читання.

Недоліки:

  1. Збільшує надмірність даних та потенційні аномалії.
  2. Ускладнює оновлення та обслуговування.

4. Нормалізація та денормалізація: ключові відмінності

Нормалізація:

  • Мета: Зменшити надмірність, покращити цілісність.
  • Структура: Більше таблиць, менше стовпців.
  • Складність запитів: Вища, вимагає з'єднань.
  • Зберігання: Ефективне, мінімальна надмірність.
  • Використання: Системи з високим навантаженням на запис, транзакційні системи.

Денормалізація:

  • Мета: Оптимізувати продуктивність запитів.
  • Структура: Менше таблиць, більше стовпців.
  • Складність запитів: Нижча, мінімізує з'єднання.
  • Зберігання: Вища, вводить надмірність.
  • Використання: Системи з високим навантаженням на читання, аналітичні системи.

5. Нормалізація, денормалізація та ACID

a. Як нормалізація підтримує ACID

  • Атомарність: Нормалізація забезпечує атомарність транзакцій, організовуючи дані в пов'язані таблиці. Наприклад, у банківській системі переведення коштів включає таблиці Accounts та Transactions. Операції успішно виконуються або не виконуються взагалі.
  • Цілісність: Нормалізація використовує обмеження, такі як первинні/зовнішні ключі, для підтримки цілісності. Наприклад, при оновленні адреси клієнта зміна відображається в пов'язаних таблицях, таких як Customers та Orders, що забезпечує відсутність невідповідностей.
  • Ізоляція: Нормалізовані дані зменшують конфлікти під час одночасних транзакцій. Наприклад, при оновленні балансів рахунків дрібні таблиці, що використовуються в нормалізації, зменшують ймовірність конфліктних змін від кількох користувачів.
  • Довговічність: Зміни зберігаються надійно в таблицях. Після транзакції, такої як переказ грошей, зміни в таблицях Accounts та Transactions є постійними, навіть якщо система зазнає збоїв.

b. Виклики денормалізації в контексті ACID

  • Атомарність: Надмірність даних вимагає оновлення кількох екземплярів. Наприклад, у денормалізованій таблиці Order зміна адреси клієнта повинна бути оновлена в усіх рядках, де цей клієнт з'являється.
  • Цілісність: Підтримка консистентності надмірних даних складніша. Якщо змінюється номер телефону клієнта, всі пов'язані записи в Order повинні бути оновлені, щоб уникнути розбіжностей.
  • Ізоляція: Денормалізовані таблиці збільшують ризик конфліктів під час одночасних оновлень. Наприклад, якщо два користувачі намагаються оновити одну й ту ж інформацію про клієнта в різних записах Order, це може призвести до неконсистентних даних.
  • Довговічність: Забезпечити надійність збереження надмірності складніше. Наприклад, якщо система збивається після оновлення деяких, але не всіх записів у Order з новими даними клієнта, база даних може опинитися в неконсистентному стані.

6. Практичні приклади

Нормалізовані системи

1. Банківські застосунки

У банківських системах транзакції часто включають переведення коштів між рахунками. Нормалізована структура бази даних може мати окремі таблиці для Accounts, Transactions та Customers.

Чому нормалізація?

  • Цілісність даних: Тримання таблиць Accounts та Transactions окремо дозволяє уникнути зберігання однієї й тієї ж інформації про рахунок кілька разів у записах транзакцій. Це забезпечує, щоб всі оновлення (наприклад, зміна адреси власника рахунку) відбувалися в одному місці і відображались в усіх таблицях.
  • Цілісність: Якщо транзакція охоплює кілька таблиць (наприклад, переведення коштів з одного рахунку на інший), нормалізація забезпечує, щоб оновлення (відрахування та зарахування) відбувалися послідовно та відповідно до ACID-властивостей.

2. Обробка замовлень в електронній комерції

В платформі електронної комерції замовлення можуть бути представлені таблицями, такими як Customers, Orders, Order_Items, Payments та Shipping.

Чому нормалізація?

  • Уникнення надмірності: Зберігання інформації про клієнта (такої як ім'я, адреса тощо) в окремій таблиці, а не разом з кожним замовленням, дозволяє уникнути повторення цієї інформації для кожного замовлення клієнта.
    Це зменшує розмір бази даних і допомагає підтримувати цілісність, коли змінюються дані клієнта.
  • Гнучкість: Оскільки клієнт може зробити кілька замовлень, використання нормалізованих таблиць дозволяє легше відслідковувати кілька продуктів та замовлень без надмірних даних, роблячи запити більш гнучкими.

3. Управління запасами

Нормалізована схема для управління запасами може розділяти таблиці Products, Suppliers, Orders та Inventory на окремі таблиці.

Чому нормалізація?

  • Точні рівні запасів: Розділяючи продукти від записів в інвентарі, можна точно оновлювати рівні запасів, не турбуючись про невідповідності. Якщо змінюється кількість продукту, оновлюється тільки таблиця Inventory, без необхідності змінювати таблицю Products.
  • Цілісність даних: Підтримка правильних відносин між продуктами та постачальниками допомагає запобігти помилкам в управлінні запасами.

4. Системи управління персоналом

Нормалізована HR система може мати таблиці для Employees, Departments, Salaries, Payroll тощо.

Чому нормалізація?

  • Уникнення дублювання даних: Деталі працівників, такі як ім’я, контактна інформація та адреса, зберігаються один раз в таблиці Employees, а департаменти, заробітні плати та нарахування — в окремих таблицях. Це дозволяє уникнути зберігання тієї ж інформації кілька разів у записах про заробітну плату.
  • Забезпечення консистентності: Коли змінюються дані про працівників (наприклад, підвищення зарплати), нормалізація забезпечує, щоб оновлення відбувалося лише в одній таблиці, зменшуючи ризик невідповідностей.

Денормалізовані системи

1. Звітність та аналітика

Звітна база даних може поєднувати дані про Customer та Order в одну таблицю для оптимізації запитів.

Чому денормалізація?

  • Швидші запити: В аналітичних платформах основною метою є часто швидке створення звітів. Денормалізуючи та зберігаючи дані про клієнта та замовлення в одній таблиці, система уникає накладних витрат на кілька з’єднань, прискорюючи отримання даних.
  • Високе навантаження на читання: Денормалізація корисна в ситуаціях, коли дані не часто оновлюються (наприклад, в звітності), але потрібен швидкий доступ до великих обсягів даних.

2. Сховище даних

У сховищі даних, дані про продажі можуть бути денормалізовані в одну таблицю, що містить всі деталі транзакцій, інформацію про клієнтів та продукти.

Чому денормалізація?

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

3. Аналітика в реальному часі

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

Чому денормалізація?

  • Миттєвий доступ до даних: Системи аналітики в реальному часі повинні надавати швидкі результати. Денормалізація дозволяє миттєвий доступ до даних без необхідності в часозатратних з’єднаннях.
  • Оптимізовано для читання: Системи в реальному часі часто зосереджені на швидкому доступі до даних для відображення інформації на панелях. Поєднуючи різні типи даних (наприклад, взаємодії користувачів, покупки та демографічні дані) в одній таблиці, система може швидко генерувати панелі без складних запитів.
    Управління контентом

Система управління контентом (CMS) може поєднувати пости блогу та коментарі в одну таблицю для швидшого рендерингу на веб-сторінці.

Чому денормалізація?

  • Швидше виконання запитів: При рендерингу контенту з коментарями користувачів денормалізований підхід прискорює процес, зберігаючи як вміст поста, так і коментарі в одній запитуваній структурі.
  • Спрощення запитів: Поєднуючи дані в одну таблицю, ви зменшуєте необхідність у складних з’єднаннях при завантаженні контенту для сторінки. Це особливо важливо в системах, де взаємодія з користувачами та завантаження контенту повинні бути швидкими.

7. Висновок

Нормалізація та денормалізація визначають, як зберігаються дані.

  1. Нормалізація тісно пов'язана з властивостями ACID, такими як консистентність, забезпечуючи надійні, структуровані дані.
  2. Денормалізація, хоча і покращує продуктивність, вимагає управління для підтримки атомарності та консистентності.

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

Корисні відео

Перекладено з: Database Design Essentials: Normalization and Denormalization

Leave a Reply

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