Представьте таблицу университета, где в одной ячейке через запятую перечислены все курсы студента, а рядом смешаны телефон и адрес. Если человек сменит фамилию или переедет, эту цепочку придётся искать и править во множестве мест. Нормализация — это осознанное разбиение данных на таблицы и связи, чтобы убрать дубли, предотвратить противоречия и упростить сопровождение базы.
Правило 1НФ простое: в каждой ячейке — одно неделимое значение из домена. Никаких «списков через запятую» в одном поле: для этого есть отдельные строки или отдельная таблица.
2НФ актуальна при составном первичном ключе. Каждый неключевой атрибут должен зависеть от всего ключа целиком, а не от его части. Если ключ — пара «студент + курс», то длительность курса зависит только от курса: хранить её в строке зачисления значит копировать одно и то же и рисковать рассинхроном.
3НФ запрещает транзитивные зависимости: неключевой столбец не должен зависеть от другого неключевого столбца. Если у студента есть `cityid` и рядом дублируется `cityname`, имя города зависит от идентификатора города, а не от первичного ключа студента. Имя нужно хранить в отдельном справочнике.