Руководство по SQL. Третья нормальная форма (3 НФ).

Таблица считается приведённой к тертьей нормальной форме (далее – 3НФ), если она выполняет следующие правила:

  • Приведена ко второй нормальной форме (далее – 2НФ).
  • Все не главные поля зависят от первичного ключа (primary key).

Предположим, что у нас есть талица developers, которая имеет следующий вид:


CREATE TABLE developers(
       DEVELOPER_ID       INT              NOT NULL,
       DEVELOPER_NAME     VARCHAR (20)      NOT NULL,
       DEVELOPER_SALARY   INT,
       COMPANY_ID         INT, 
       COMPANY_NAME       VARCHAR(100),
       COMPANY_ADDRESS    VARCHAR(100),
       PRIMARY KEY (DEVELOPER_ID)
);

Зависимость между id компании и именем компании называется транзитивной. Для того, чтобы привести нашу базу данных (далее – БД) к 3НФ, мы должны вынести COMPANY_ID, COMPANY_NAME и COMPANY_ADDRESS в отдельную таблицу:


CREATE TABLE companies(
       COMPANY_ID       INT            NOT NULL,
       COMPANY_NAME     VARCHAR(200),
       COMPANY_ADDRESS  VARCHAR(100),
       PRIMARY KEY (COMPANY_ID)
);


CREATE TABLE developers(
       DEVELOPER_ID       INT              NOT NULL,
       DEVELOPER_NAME     VARCHAR (20)      NOT NULL,
       DEVELOPER_SALARY   INT,
       COMPANY_ID         INT, 
       PRIMARY KEY (DEVELOPER_ID)
);

Преимущество от удаления транзитивных связей заключается в том, что:

  • Уменьшается количество повторяющихся данных.
  • Интеграционность данных. Если у нас есть повторяющиеся данные, то увеличивается риск обновления только части этих данных.
    Например, если одна и таже компании содержится в 1 записях, то мы легко можем по ошибке исправить адресс компании только у 9 из 10 разработчиков.

На этом мы заканчиваем изучение третьей нормальной формы (3НФ) БД.