Ответ
Третья нормальная форма (3NF) — это правило проектирования реляционных баз данных, направленное на устранение транзитивных зависимостей и избыточности данных. Таблица находится в 3NF, если:
- Она находится во второй нормальной форме (2NF) (нет частичных зависимостей неключевых атрибутов от составного ключа).
- Все неключевые атрибуты зависят ТОЛЬКО от первичного ключа, а не друг от друга (нет транзитивных зависимостей).
Пример нарушения 3NF:
В таблице Заказы атрибут ИмяЗаказчика зависит не от первичного ключа ID_Заказа, а от другого неключевого атрибута ID_Клиента.
-- НЕ в 3NF
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
CustomerID INT,
CustomerName VARCHAR(100), -- Зависит от CustomerID, а не от OrderID!
OrderDate DATE
);
-- Проблема: при смене имени клиента нужно обновлять все его заказы.
Исправление (приведение к 3NF): Необходимо вынести транзитивно зависимые атрибуты в отдельную таблицу.
-- Таблица Customers (отдельная сущность)
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
CustomerName VARCHAR(100) NOT NULL
);
-- Таблица Orders (ссылается на Customers)
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
CustomerID INT NOT NULL,
OrderDate DATE NOT NULL,
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
Преимущества 3NF:
- Устранение аномалий обновления: Имя клиента хранится в одном месте.
- Сокращение избыточности: Данные не дублируются.
- Упрощение поддержки: Структура становится более логичной и гибкой.