Продължете към съдържанието
Начало » Блог » Нормализация на база данни: пълно ръководство

Нормализация на база данни: пълно ръководство

Нормализацията е основен процес в проектирането на релационни бази данни, чиято цел е да се сведат до минимум излишъците от данни, да се подобри целостта на данните и да се улесни тяхното поддържане. Нормализацията е независима от конкретната система за управление на бази данни (СУБД) – тя важи еднакво както за Oracle, така и за MySQL, PostgreSQL, SQL Server и други.


Какво представлява нормализацията?

Нормализацията е процесът на разделяне на големи таблици в по-малки и свързани помежду си таблици и определяне на връзките между тях с помощта на ключове. Това се прави поетапно чрез преминаване през различни нормални форми (normal forms, NF).


Причини за нормализация

  • Премахване на дублирани данни
  • Минимизиране на аномалии при вмъкване, актуализация и изтриване
  • Подобряване на логическата структура на базата данни
  • Улесняване на поддръжката и бъдещото развитие

Нормални форми (Normal Forms)

Нормализацията се осъществява чрез прилагане на поредица от нормални форми, всяка от които налага специфични правила. По-долу са описани най-важните нормални форми:


1. Първа нормална форма (1NF)

Изискване: Всяко поле в таблица трябва да съдържа атомарна (неразделима) стойност и всички записи да бъдат уникални.

Пример за нарушение:

Студент Телефони
Иван 0888123456, 0888123457

Нормализирано (1NF):

Студент Телефон
Иван 0888123456
Иван 0888123457

2. Втора нормална форма (2NF)

Изискване: Да бъде в 1NF и всички неключови атрибути да зависят напълно от първичния ключ.

Подходяща при съставен ключ – трябва да се премахнат частичните зависимости.

Пример за нарушение:

СтудентID КурсID Име на студент Име на курс
  • Име на студент зависи само от СтудентID, а не от целия съставен ключ.

Нормализирано (2NF):

  • Таблица Студенти(СтудентID, Име)
  • Таблица Курсове(КурсID, Име)
  • Таблица Записвания(СтудентID, КурсID)

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

Изискване: Да бъде в 2NF и всички неключови атрибути да зависят само от първичния ключ (без транзитивни зависимости).

Пример за нарушение:

КлиентID Име на клиент Град Пощенски код
  • Град зависи от Пощенски код, който пък зависи от КлиентID.

Нормализирано (3NF):

  • Таблица Клиенти(КлиентID, Име, Пощенски код)
  • Таблица Градове(Пощенски код, Град)

Boyce-Codd нормална форма (BCNF)

Подобна на 3NF, но по-строга. Изисква, че всеки детерминант трябва да бъде ключ.

Използва се, когато:

  • има множество кандидат-ключове
  • има зависимости, които нарушават 3NF, въпреки че таблицата е във 2NF

4-та нормална форма (4NF)

Изискване: Да бъде в BCNF и да няма многостойностни зависимости.

Пример за нарушение:

Преподавател Курс Език
Иван Бази данни Английски
Иван Бази данни Немски
  • Ако Курс и Език са независими, това нарушава 4NF.

5-та нормална форма (5NF) или Проекционно-съединителна нормална форма

Използва се рядко и касае ситуации, при които:

  • Една таблица се разделя на множество чрез съединения, за да се избегнат аномалии на съединенията.

Денормализация

Понякога в реалния свят се използва и обратният процес – денормализация, при който умишлено се допуска дублиране с цел:

  • по-добра производителност (по-малко JOIN-ове)
  • по-бързо извличане на отчетни данни

Денормализацията е компромис между ефективност и целостта на данните.


Нормализацията е критично важна при проектирането на всяка релационна база данни. Правилното прилагане на нормалните форми гарантира:

  • по-лесна поддръжка
  • по-малко грешки
  • по-качествен модел на данни

Въпреки че процесът изглежда академичен, добрият DBA или разработчик знае кога да нормализира и кога да денормализира за баланс между чистота и производителност.