Нормализация данных

Нормализация данных

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

Термины и понятия

Атрибут – свойство некоторой сущности, часто называется полем таблицы.

Домен атрибута – множество допустимых значений атрибута.

Скалярное значение – одно значение (одна строка, один столбец) необходимого типа данных; не может быть разделено на более мелкие составляющие.

Функциональная зависимость между атрибутами X и Y: если два кортежа совпадают по X, они совпадают и по Y. Обозначение: {X} → {Y}. Например, если значение атрибута «Название компании» — Canonical Ltd, то значением атрибута «Штаб-квартира» в таком кортеже всегда будет Millbank Tower, London, United Kingdom.

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

Первичный ключ – поле, однозначно идентифицирующее каждую запись в таблице.

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

Цель нормализации – исключить избыточное дублирование данных, которое приводит к аномалиям при добавлении, изменении и удалении строк.

Первая нормальная форма (1NF)

Таблица находится в 1NF, если:

  • атрибуты являются простыми;

  • домены атрибутов содержат только скалярные значения;

  • в таблице нет повторяющихся строк.

Пример таблицы «Автомобили», нарушающей 1NF: в ячейке «Модель» для Lada хранится список из трёх значений – нарушение атомарности.

Марка

Модель

Марка

Модель

Lada

Granta, Priora, Vesta

Chevrolet

Camaro

После приведения к 1NF каждая модель занимает отдельную строку:

Марка

Модель

Марка

Модель

Lada

Granta

Lada

Priora

Lada

Vesta

Chevrolet

Camaro

Вторая нормальная форма (2NF)

Таблица находится в 2NF, если:

  • она уже находится в 1NF;

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

Пример таблицы, нарушающей 2NF: «Скидка» зависит только от «Марки», а не от полного первичного ключа (Модель + Марка).

Модель

Марка

Цена

Скидка

Модель

Марка

Цена

Скидка

Granta

Lada

800 000

10%

Priora

Lada

550 000

10%

Vesta

Lada

1 500 000

10%

Camaro

Chevrolet

3 400 000

5%

Исправляется декомпозицией на две таблицы: «Модели с ценами» и «Марки со скидками».

Модель

Марка

Цена

Модель

Марка

Цена

Granta

Lada

800 000

Priora

Lada

550 000

Vesta

Lada

1 500 000

Camaro

Chevrolet

3 400 000

Марка

Скидка

Марка

Скидка

Lada

10%

Chevrolet

5%

Третья нормальная форма (3NF)

Таблица находится в 3NF, если:

  • она уже находится в 2NF;

  • каждый неключевой атрибут нетранзитивно зависит от первичного ключа.

Необходимо вынести все неключевые поля, содержимое которых может относиться к нескольким записям, в отдельные таблицы. Пример таблицы, нарушающей 3NF: «Телефон» зависит от «Магазина», а не от «Марки» – транзитивная зависимость: Марка → Магазин → Телефон.

Марка

Магазин

Телефон

Марка

Магазин

Телефон

Lada

Сокол Моторс

309-20-79

Chery

Сокол Моторс

309-20-79

Chevrolet

Эксперт Моторс

273-16-92

Приведение к 3NF — декомпозиция на две таблицы:

Магазин

Телефон

Магазин

Телефон

Сокол Моторс

309-20-79

Эксперт Моторс

273-16-92

Марка

Магазин

Марка

Магазин

Lada

Сокол Моторс

Chery

Сокол Моторс

Chevrolet

Эксперт Моторс

Практическое применение нормализации

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

image-20260524-095825.png

При разбиении на две нормализованные таблицы — «Продажи» и «Номенклатура» — изменение наименования в 1С автоматически отражается в базе данных и в итоговых представлениях:

image-20260524-100239.png

Для соединения нормализованных таблиц между собой необходим уникальный ключ. Такие ключи можно получить на этапе настройки вычисляемых полей в Экстракторе.

На этой странице


Нужна дополнительная помощь?

Обратитесь в службу поддержки Visiology.