Вопрос проверяет знание нормальных форм (НФ) в реляционных базах данных, которые нужны для устранения избыточности и аномалий при модификации данных.
Нормализация — это систематический процесс организации полей и таблиц в реляционной базе данных для минимизации дублирования данных и предотвращения аномалий обновления, вставки и удаления. Основная цель — добиться, чтобы каждая таблица хранила информацию об одной сущности, а зависимости между данными были логичными и непротиворечивыми.
Рассмотрим таблицу Orders с полями: OrderID, ProductID, ProductName, CustomerID, CustomerCity. Здесь ProductName зависит от ProductID, а не от всего ключа (OrderID, ProductID) — нарушение 2НФ. CustomerCity зависит от CustomerID, а не от OrderID — нарушение 3НФ.
-- Ненормализованная таблица (нарушает 2НФ и 3НФ)
CREATE TABLE OrdersBad (
OrderID INT,
ProductID INT,
ProductName VARCHAR(100),
CustomerID INT,
CustomerCity VARCHAR(100),
PRIMARY KEY (OrderID, ProductID)
);
-- Нормализованная структура
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
CustomerID INT
);
CREATE TABLE OrderDetails (
OrderID INT,
ProductID INT,
PRIMARY KEY (OrderID, ProductID)
);
CREATE TABLE Products (
ProductID INT PRIMARY KEY,
ProductName VARCHAR(100)
);
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
CustomerCity VARCHAR(100)
);Вывод: Нормализация применяется на этапе проектирования базы данных для обеспечения целостности данных и эффективности. Однако чрезмерная нормализация может привести к необходимости частых JOIN-запросов, поэтому на практике иногда сознательно допускают денормализацию для повышения производительности чтения в системах аналитики (OLAP).