Таблица считается приведённой к тертьей нормальной форме (далее – 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НФ) БД.