Skip to main content

Нормализация (нормальные формы) в реляционной модели данных.

Нормализация — процесс удаления избыточных данных, устранение аномалий.

Цели

  • Повышение производительности
  • Повышение удобства управления данными

Избыточность данных — когда одни и те же данные хранятся в нескольких местах базы данных.

Процесс нормализации — последовательный процесс приведения базы данных к эталонному виду, переход от одной нормальной формы к следующей.

Нормальная форма базы данных — набор правил и критериев, которым должна соответствовать база данных.


UNF (Ненормальная форма, нулевая нормальная форма)

Перед приведением БД к нормальной форме нужно привести её к табличному виду, чтобы он соответствовал базовым принципам реляционной теории:

  • строки в таблицах не должны быть пронумерованы
  • порядок столбцов не имеет значения

Пример таблицы в UNF

BlockID Area Operator Holes Depths Explosives Charges
B1 A1 Op1 H1,H2 10,12 ANFO, Emulsion 50,60

Проблемы:

  • В ячейках содержится несколько значений
  • Данные дублируются

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

Правила 1NF:

  • Ячейки таблицы хранят атомарные значения — одно не составное значение в каждой ячейке
  • Строки таблицы не должны дублироваться
  • Столбцы должны содержать данные одного типа

Пример таблицы в 1NF

BlockID Area Operator HoleID Depth Explosive Charge
B1 A1 Op1 H1 10 Березит 50
B1 A1 Op1 H2 12 Амонит 60

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

Правила 2NF:

  • Таблица должна иметь ключ, по которому можно идентифицировать каждую строку
  • Все неключевые столбцы должны зависеть от полного ключа (для составного ключа)
  • Выделяем отдельные сущности, чтобы убрать дублирование данных и частичные зависимости

Примеры таблиц в 2NF

BlastBlock

BlockID AreaID OperatorID
B1 A1 O1

Area

AreaID AreaName
A1 Pit-1

Operator

OperatorID OperatorName
O1 Опер главный

BlastHole

HoleID BlockID Depth
H1 B1 10
H2 B1 12

Charging

HoleID ExplosiveID Charge
H1 E1 50
H2 E2 60

ExpAgent

ExplosiveID ExplosiveName
E1 Березит
E2 Амонит

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

Правила 3NF:

  • Нет транзитивных зависимостей
    (одно поле не зависит от другого неключевого поля)

Примеры в наших таблицах:

  • AreaName зависит только от AreaID
  • OperatorName зависит только от OperatorID
  • ExplosiveName зависит только от ExplosiveID

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

Правила BCNF:

  • Любой детерминант (столбец или комбинация столбцов, от которых что-то зависит) должен быть кандидатом в ключ

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