Перейти к содержанию

Начало урока

Нормализация: 1NF, 2NF и 3NF

Организуйте таблицы так, чтобы каждый факт хранился один раз, ровно в одном месте

Главная идея: Нормализация - это процесс разбиения широкой, повторяющейся таблицы на меньшие связанные таблицы так, чтобы каждый факт жил ровно в одном месте. Выгода - меньше ошибок: вы перестаёте хранить одно и то же значение во многих строках, поэтому оно не может противоречить самому себе. Первые три нормальные формы - 1NF, 2NF и 3NF - это чек-лист, который применяют по одному шагу, каждый убирает свой вид избыточности.
К концу вы сможете:
  • назвать три аномалии, которые вызывает избыточность,
  • читать функциональную зависимость, например order_id -> customer_id,
  • привести таблицу к 1NF (атомарные значения, без повторяющихся групп),
  • достичь 2NF, убрав частичные зависимости от составного ключа,
  • достичь 3NF, убрав транзитивные зависимости,
  • решить, когда денормализация - разумный компромисс.

1. Проблема: одна большая таблица

Представьте интернет-магазин, который записывает каждую строку заказа в одну широкую таблицу. Это кажется удобным - всё в одном месте - но одни и те же данные о клиенте и товаре копируются во множество строк.

order_idcustomer_namecustomer_cityproductstotal
1001Aida SultanovaBishkekKeyboard, Mouse45.00
1002Aida SultanovaBishkekMonitor150.00
1003Boris IvanovOshMouse15.00

Поскольку Aida Sultanova / Bishkek появляется в двух строках, а ячейка products втискивает несколько товаров вместе, эта таблица страдает от трёх классических аномалий:

  • Аномалия обновления: если Aida переедет в Osh, вам придётся найти и изменить каждую строку, где она упомянута. Пропустите одну - и база данных заявит, что она живёт сразу в двух городах.
  • Аномалия вставки: вы не можете записать нового клиента, который ещё ничего не заказал, потому что нет строки, куда его поместить, не выдумав фиктивный заказ.
  • Аномалия удаления: удалите заказ 1003 - и вы сотрёте единственную запись о том, что Boris Ivanov вообще существует.

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

Продолжите этот урок на YourAIZone

В полном уроке — объяснение целиком, разобранные примеры, частые ошибки, тесты с мгновенной проверкой и ИИ-репетитор. Начните сразу как гость или создайте аккаунт, чтобы сохранять прогресс.

В полном уроке

  • Объяснение целиком
  • Разобранные примеры
  • Частые ошибки и как их избежать
  • Тестовые вопросы: 15
  • ИИ-репетитор, который отвечает на вопросы по теме
  • Отслеживание прогресса для ученика, родителей и учителя