Что такое первая нормальная форма (1NF) в реляционных базах данных?

«Что такое первая нормальная форма (1NF) в реляционных базах данных?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

  1. Атомарность значений (Atomicity of Values): Все значения в каждом столбце должны быть неделимыми (атомарными). В одной ячейке не может быть множественных значений (массивов, списков) или составных данных.
  2. Отсутствие повторяющихся групп: Не должно быть столбцов, которые представляют собой повторяющиеся атрибуты (например, Phone1, Phone2, Phone3).
  3. Уникальность строк: Каждая строка должна быть уникально идентифицируема с помощью первичного ключа (простого или составного).

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

-- НЕ в 1NF: столбец `Phones` содержит составное значение
CREATE TABLE Employees (
    EmployeeID INT,
    Name VARCHAR(100),
    Phones VARCHAR(200) -- Может содержать "123-456, 789-012"
);

Приведение к 1NF:

-- В 1NF: Каждый телефон вынесен в отдельную строку
CREATE TABLE Employees (
    EmployeeID INT,
    Name VARCHAR(100),
    PRIMARY KEY (EmployeeID)
);

CREATE TABLE EmployeePhones (
    EmployeeID INT,
    PhoneNumber VARCHAR(20),
    PRIMARY KEY (EmployeeID, PhoneNumber),
    FOREIGN KEY (EmployeeID) REFERENCES Employees(EmployeeID)
);
-- Теперь для сотрудника с ID=1 может быть две записи:
-- (1, '123-456') и (1, '789-012')

Зачем это нужно? 1NF устраняет избыточность и аномалии при обновлении данных, обеспечивает согласованность и упрощает выполнение запросов (например, поиск по конкретному номеру телефона). Это обязательная основа для приведения таблиц ко второй (2NF) и третьей (3NF) нормальным формам.