Карта / SQL / Нормализация

Нормализация

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

-- ❌ без нормализации: имя города дублируется в каждой строке
| user_id | name  | city_name | city_population |
|---------|-------|-----------|------------------|
| 1       | Артур | Москва    | 12 000 000       |
| 2       | Борис | Москва    | 12 000 000       |   ← дублирование

-- ✅ с нормализацией: город вынесен в отдельную таблицу
users:  | id | name  | city_id |
cities: | id | name   | population |

Если у Москвы изменится население — меняешь одну строку в cities, а не каждую строку пользователя из Москвы.

Копнуть глубже

Нормальные формы — ступени правильности структуры:

  • 1NF — каждое поле атомарно (не хранить список значений в одной ячейке через запятую);
  • 2NF — каждое не-ключевое поле зависит от всего первичного ключа, а не от его части;
  • 3NF — поля зависят только от ключа, не друг от друга через посредника.

Главная выгода нормализации — нет аномалий обновления: не нужно искать и менять одно и то же значение в десятках строк, риск рассинхронизации данных исчезает.

Денормализация — иногда осознанно нарушают правила ради скорости чтения: дублируют немного данных, чтобы не делать лишний JOIN на каждый запрос. Это компромисс — выбирают, когда скорость чтения важнее идеальной структуры (часто в аналитических базах).

🎤 Закрыл тему, если можешь объяснить:
• зачем нужна нормализация и какую проблему она решает;
• идею нормальных форм и зачем иногда денормализуют (если дошёл до 2-го слоя).