Учебники

4) Нормализация

Что такое нормализация?

НОРМАЛИЗАЦИЯ — это метод проектирования базы данных, который организует таблицы таким образом, чтобы уменьшить избыточность и зависимость данных. Нормализация делит большие таблицы на меньшие таблицы и связывает их, используя отношения. Целью нормализации является устранение избыточных (бесполезных) данных и обеспечение логического хранения данных.

Изобретатель реляционной модели Эдгар Кодд предложил теорию нормализации с введением первой нормальной формы, и он продолжил расширять теорию второй и третьей нормальной формой. Позже он присоединился к Раймонду Ф. Бойсу для разработки теории нормальной формы Бойса-Кодда.

В этом уроке вы узнаете

Нормальные формы базы данных

Теория нормализации данных в SQL все еще развивается. Например, есть обсуждения даже на 6- й нормальной форме. Однако в большинстве практических применений нормализация достигает своего наилучшего значения в 3- й  нормальной форме . Эволюция теорий нормализации проиллюстрирована ниже:

Нормализация базы данных

Пример нормализации базы данных:

Мы будем изучать нормализацию с помощью тематического исследования. Предположим, видео библиотека поддерживает базу данных фильмов, сдаваемых в аренду. Без какой-либо нормализации вся информация хранится в одной таблице, как показано ниже.

Что такое нормализация?  1NF, 2NF, 3NF и BCNF с примерами

Таблица 1

Здесь вы видите, что Movies Rented column имеет несколько значений. Теперь давайте перейдем к 1-м нормальным формам:

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

  • Каждая ячейка таблицы должна содержать одно значение.
  • Каждая запись должна быть уникальной.

Таблица выше в 1NF-

Пример 1NF

Что такое нормализация?  1NF, 2NF, 3NF и BCNF с примерами

Таблица 1: в форме 1NF

Прежде чем мы продолжим, давайте разберемся в нескольких вещах —

Что такое ключ?

KEY — это значение, используемое для уникальной идентификации записи в таблице. КЛЮЧ может быть один столбец или комбинация нескольких столбцов

Примечание. Столбцы в таблице, которые НЕ используются для однозначной идентификации записи, называются неключевыми столбцами.

Что такое первичный ключ?

Что такое нормализация?  1NF, 2NF, 3NF и BCNF с примерами

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

Имеет следующие атрибуты

  • Первичный ключ не может быть NULL
  • Значение первичного ключа должно быть уникальным
  • Значения первичного ключа следует редко менять
  • Первичному ключу должно быть присвоено значение при вставке новой записи.

Что такое составной ключ?

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

В нашей базе данных есть два человека с одинаковым именем Роберт Фил, но они живут в разных местах.

Что такое нормализация?  1NF, 2NF, 3NF и BCNF с примерами

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

Давайте перейдем во вторую нормальную форму 2NF

2NF (вторая нормальная форма) правила

  • Правило 1 — быть в 1НФ
  • Правило 2 — Первичный ключ с одним столбцом

Ясно, что мы не сможем сделать нашу простую базу данных в форме 2- й нормализации, если не разберем таблицу выше.

Что такое нормализация?  1NF, 2NF, 3NF и BCNF с примерами

Таблица 1

Что такое нормализация?  1NF, 2NF, 3NF и BCNF с примерами

Таблица 2

Мы разделили нашу таблицу 1NF на две таблицы, а именно. Таблица 1 и Таблица2. Таблица 1 содержит информацию об участниках. Таблица 2 содержит информацию об арендованных фильмах.

Мы ввели новый столбец с именем Membership_id, который является первичным ключом для таблицы 1. Записи могут быть однозначно идентифицированы в таблице 1 с использованием идентификатора членства.

База данных — внешний ключ

В таблице 2 Membership_ID является внешним ключом

Что такое нормализация?  1NF, 2NF, 3NF и BCNF с примерами

Что такое нормализация?  1NF, 2NF, 3NF и BCNF с примерами

Внешний ключ ссылается на первичный ключ другой таблицы! Это помогает соединить ваши таблицы

  • Внешний ключ может иметь имя, отличное от его первичного ключа.
  • Это гарантирует, что строки в одной таблице имеют соответствующие строки в другой
  • В отличие от первичного ключа, они не должны быть уникальными. Чаще всего они не
  • Внешние ключи могут быть нулевыми, хотя первичные ключи не могут 

Что такое нормализация?  1NF, 2NF, 3NF и BCNF с примерами

Зачем вам нужен внешний ключ?

Предположим, новичок вставляет запись в таблицу B, такую ​​как

Что такое нормализация?  1NF, 2NF, 3NF и BCNF с примерами

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

Вышеупомянутая проблема может быть преодолена путем объявления идентификатора членства из таблицы 2 в качестве внешнего ключа идентификатора членства из таблицы 1

Теперь, если кто-то попытается вставить значение в поле идентификатора членства, которого нет в родительской таблице, появится сообщение об ошибке!

Что такое транзитивные функциональные зависимости?

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

Рассмотрим таблицу 1. Изменение неключевого столбца Полное имя может изменить приветствие.

Что такое нормализация?  1NF, 2NF, 3NF и BCNF с примерами

Давайте перейдем в 3NF

3NF (третья нормальная форма) правила

  • Правило 1 — быть в 2NF
  • Правило 2 — не имеет транзитивных функциональных зависимостей

Чтобы переместить нашу таблицу 2NF в 3NF, нам снова нужно снова разделить нашу таблицу.

Пример 3NF

Что такое нормализация?  1NF, 2NF, 3NF и BCNF с примерами

ТАБЛИЦА 1

Что такое нормализация?  1NF, 2NF, 3NF и BCNF с примерами

Таблица 2

Что такое нормализация?  1NF, 2NF, 3NF и BCNF с примерами

Таблица 3

Мы снова разделили наши таблицы и создали новую таблицу, в которой хранятся приветствия. 

Там нет транзитивных функциональных зависимостей, и, следовательно, наша таблица в 3NF

В таблице 3 идентификатор приветствия является первичным ключом, а в таблице 1 идентификатор приветствия является внешним по отношению к первичному ключу в таблице 3.

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

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

Даже если база данных находится в 3- й нормальной форме, все равно могут возникнуть аномалии, если она имеет более одного ключа- кандидата .

Иногда BCNF также называют 3.5 нормальной формой.

4NF (Четвертая Нормальная Форма) Правила

Если ни один экземпляр таблицы базы данных не содержит двух или более независимых и многозначных данных, описывающих соответствующий объект, он находится в 4- й нормальной форме.

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

Таблица находится в 5- й нормальной форме, только если она находится в 4NF и не может быть разложена на любое количество таблиц меньшего размера без потери данных.

6NF (Шестая Нормальная Форма) Предложено

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

Это все для нормализации !!!

Резюме

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