Нормализация данных — это процесс, с помощью которого мы можем уменьшить избыточность данных, повысить целостность данных и уменьшить аномалии данных в реляционных базах данных. Это позволяет нам экономить место на диске, гарантируя, что мы не повредим наши данные при попытке вставить, обновить или удалить данные из нашей базы данных. Эти правила охватываются последовательными накопительными нормальными формами. Итак, что это такое и как мы можем использовать их для нормализации нашей базы данных?

Обычные формы — это просто наборы правил, которые, когда мы разрабатываем нашу схему базы данных, строго придерживаясь этих правил, производят все более нормализованные данные. Первая нормальная форма — сокращенно 1НФ — представляет собой самый базовый набор правил для нормализации данных. Он следует четырем основным принципам:

  1. Данные должны быть атомарными — только 1 часть данных в каждой ячейке. Нет списков или контейнеров
  2. Все значения в столбце должны быть одного типа — все они должны быть одного типа данных (например, число, строка, дата) и представлять одно и то же.
  3. Столбцы должны иметь уникальные имена
  4. Порядок данных не должен зависеть от порядка — если столбцы помечены правильно и данные находятся в правильной строке, порядок данных не должен иметь значения.

Если наша база данных постоянно следует всем этим правилам, поздравляем! Мы только что создали базу данных в первой нормальной форме!

Если мы хотим выйти за пределы абсолютного минимума и дополнительно нормализовать наши данные, мы можем перейти ко второй нормальной форме (2НФ). Все нормальные формы накапливают правила форм, предшествующих им: т.е. первое требование для 2NF состоит в том, что данные должны быть в 1NF. Единственным дополнительным требованием для 2NF является устранение частичной зависимости. По сути, это означает, что все столбцы в данной таблице должны зависеть от первичного ключа этой таблицы (или того, что делает его уникальным). Обычно это включает деструктурирование таблиц на более мелкие, более специализированные таблицы, каждая из которых содержит ссылки на другие. Если наша таблица содержит имена наших студентов и их студенческие билеты, а также название их дипломных проектов и информацию об их проекте, лучше всего разбить ее на 2 таблицы, одна из которых содержит информацию о студенте, а другая — информацию о проекте.

Чтобы достичь 3NF, мы должны снова убедиться, что наша база данных достигла 1NF и 2NF. 3NF также требует удаления всех транзитивных зависимостей. Транзитивные данные — это данные, которые логически следуют за другой частью данных в таблице. Если мы сохраним возраст и даты рождения наших учеников в одной таблице, легко увидеть, где любые изменения могут привести к аномалиям, чтобы нормализовать эти данные, мы можем просто удалить столбец возраста и сохранить только дату рождения.

За пределами 3NF находятся элементарная ключевая нормальная форма (EKNF) и нормальная форма Бойса-Кодда (BCNF) и многое другое. Нормализация данных — это наука, и мы всегда можем нормализовать дальше, но в какой-то момент создание большего количества объединений и более сложных запросов может сделать вашу базу данных более громоздкой или добавить больше ошибок и места для человеческих ошибок. Иногда вы даже можете обнаружить, что для достижения желаемых результатов лучше всего денормализовать базу данных. Нормализация — это цель, к которой нужно стремиться, но мы не должны позволять ей мешать выпускаемому нами продукту.