Нормализация базы данных простыми словами: зачем разделять таблицы

Почему сведения о клиенте и его заказах удобно хранить отдельно, какие ошибки предотвращает нормализация и в чём её цена.

Повторяющиеся карточки клиентов разобраны на две связанные группы: клиенты и заказы.

Когда карточка клиента повторяется

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

Нормализация — способ организовать связанные сведения так, чтобы одно и то же описание без необходимости не повторялось во многих местах. Microsoft Learn прямо приводит смену адреса клиента как пример: обновить сведения проще, если они хранятся в таблице клиентов один раз. Это не косметическая перестановка столбцов, а решение о том, где находится ответственная запись.

Клиенты отдельно, заказы отдельно

В простом варианте одна таблица хранит карточки клиентов, другая — заказы. Каждый заказ ссылается на нужного клиента по устойчивому идентификатору. Тогда исправление адреса происходит в карточке клиента, а история заказов остаётся связанной с тем же человеком. О том, как именно такая связь не даёт перепутать людей и покупки, есть отдельная статья про первичный и внешний ключ.

Важно не сделать неверный вывод: не всё, что внешне похоже на повторение, нужно удалять. В заказе может требоваться адрес доставки именно на момент покупки, даже если нынешний адрес клиента уже другой. Это самостоятельный факт о заказе. Проектировщик сначала выясняет смысл полей и правила работы, а уже затем выбирает, что хранить отдельно.

Условный пример изменения адреса

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

Такой пример показывает, почему правила данных важнее механического деления таблиц. До изменения структуры спросите владельца процесса, какие сведения должны меняться вместе, а какие обязаны сохранять прошлое состояние. Ответ влияет на отчёты, поддержку покупателей и разбор спорных заказов.

Что даёт разделение и сколько оно стоит

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

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

Когда достаточно простой схемы

Начинайте с конкретных вопросов: какие объекты есть в процессе, что может измениться независимо, какие исторические сведения нельзя переписывать. Для учебного примера с несколькими заказами достаточно ясной связи клиента и заказа. Для рабочей системы учитывают также права доступа, качество поступающих данных и запросы отчётности. Названия «первая», «вторая» и «третья» нормальные формы полезны позже, когда базовая идея уже понятна.

Если хотите последовательно освоить устройство таблиц, связи и работу с данными, посмотрите курс «SQL инженер». При выборе программы соотнесите её практические задачи с тем, что нужно делать вам: создавать схему, читать отчёты или разбирать ошибки в данных.

SQL инженер
Курс
Доступ сразу
SQL инженер

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

С нуля до junior
Теория и практика
Диплом по окончании
500
₽/мес
УЗНАТЬ ПОДРОБНЕЕ

Источники

Читайте также

Обучить команду или нанять специалиста по данным: как выбрать
47

Обучить команду или нанять специалиста по данным: как выбрать

Как руководителю определить, какие навыки развивать внутри команды, когда нужна новая роль и почему обучение и найм часто дополняют друг друга.
Вертикальное и горизонтальное масштабирование данных: в чём разница
46

Вертикальное и горизонтальное масштабирование данных: в чём разница

Когда системе добавляют мощность одного сервера, когда делят работу между несколькими и почему увеличение ресурсов само по себе не решает любую проблему.
Журнал изменений данных: как выяснить, кто и когда изменил набор
43

Журнал изменений данных: как выяснить, кто и когда изменил набор

Что можно узнать из журнала действий с данными, как он помогает разбирать ошибки и почему его записи не показывают всю историю сами по себе.

Занятия проходят
в Нова Дата СДО

Вебинары, практика и общение с преподавателем — в одном окне браузера.

Посмотреть интерфейс платформы
Календарь обучения в Нова Дата СДО
Курсы студента в Нова Дата СДО
Редактор кода для практики в Нова Дата СДО
Вебинары и расписание Ваши курсы Код в браузере
Нова Дата СДО — в реестре российского ПОРеестровая запись № 34931
Заявка отправлена
Отправим вам подборку курсов в течение 5 минут. С вами также свяжется наш специалист и даст карьерную консультацию.
Персональный промокод
На курс «Инженер по парсингу данных»
Введите код при оплате, чтобы применить скидку к программе.