Какие существуют формы нормализации базы данных?sql-20

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

Основные нормальные формы

1. Первая нормальная форма

Требования:

  • Все атрибуты атомарны (неделимы)
  • Нет повторяющихся групп или массивов
  • Каждая запись уникальна (определен первичный ключ)

Пример нарушения:

CREATE TABLE orders (
    order_id INT,
    customer VARCHAR(100),
    products VARCHAR(500) -- Список товаров через запятую (нарушение)
);

Исправленный вариант:

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT
);

CREATE TABLE order_items (
    order_item_id INT PRIMARY KEY,
    order_id INT,
    product_id INT,
    FOREIGN KEY (order_id) REFERENCES orders(order_id)
);

2. Вторая нормальная форма

Требования:

  • Соответствует 1NF
  • Все неключевые атрибуты полностью зависят от всего первичного ключа (нет частичных зависимостей)

Пример нарушения:

CREATE TABLE order_items (
    order_id INT,
    product_id INT,
    product_name VARCHAR(100), -- Частичная зависимость (только от product_id)
    quantity INT,
    PRIMARY KEY (order_id, product_id)
);

3. Третья нормальная форма

Требования:

  • Соответствует 2NF
  • Нет транзитивных зависимостей (неключевые атрибуты не зависят от других неключевых атрибутов)

Пример нарушения:

CREATE TABLE employees (
    emp_id INT PRIMARY KEY,
    dept_id INT,
    dept_name VARCHAR(100), -- Транзитивная зависимость (зависит от dept_id)
    salary INT
);

4. Нормальная форма Бойса-Кодда

Требования:

  • Усиленная 3NF
  • Для каждой функциональной зависимости X → Y, X должен быть суперключом

Пример нарушения:

CREATE TABLE student_courses (
    student_id INT,
    course_id INT,
    professor_id INT, -- Профессор зависит от курса, но курс не суперключ
    PRIMARY KEY (student_id, course_id)
);

Дополнительные нормальные формы

5. Четвертая нормальная форма

Требования:

  • Соответствует BCNF
  • Нет нетривиальных многозначных зависимостей

Пример нарушения:

CREATE TABLE employee_skills_languages (
    emp_id INT,
    skill VARCHAR(100),
    language VARCHAR(100),
    PRIMARY KEY (emp_id, skill, language)
);

6. Пятая нормальная форма

Требования:

  • Соответствует 4NF
  • Нет нетривиальных зависимостей соединения

Сравнение нормальных форм

ФормаРешаемая проблемаКритерий
1NFАтомарность данныхНет составных атрибутов
2NFЧастичные зависимостиПолная функциональная зависимость
3NFТранзитивные зависимостиНет зависимостей между неключевыми полями
BCNFЗависимости от неключевых атрибутовВсе детерминанты - суперключи
4NFМногозначные зависимостиНет независимых многозначных зависимостей
5NFЗависимости соединенияНет возможности дальнейшего декомпозирования без потерь

Практическое применение

  1. OLTP-системы обычно нормализуют до 3NF или BCNF
  2. Аналитические системы (OLAP) часто используют денормализацию
  3. Проектирование обычно идет от 1NF к более высоким формам

Пример полной нормализации:

-- Полностью нормализованная структура (3NF)
CREATE TABLE customers (
    customer_id INT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100) UNIQUE
);

CREATE TABLE products (
    product_id INT PRIMARY KEY,
    name VARCHAR(100),
    price DECIMAL(10,2)
);

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    order_date DATE,
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

CREATE TABLE order_items (
    order_item_id INT PRIMARY KEY,
    order_id INT,
    product_id INT,
    quantity INT,
    FOREIGN KEY (order_id) REFERENCES orders(order_id),
    FOREIGN KEY (product_id) REFERENCES products(product_id)
);

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