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



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

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

Аномалии могут возникать при вставке, обновлении или удалении записей из таблицы базы данных (если база данных плохо спроектирована). Например, если у вас есть таблица базы данных, как показано в таблице, когда запись обновляется для изменения адреса клиента, все строки, в которых существует запись клиента, должны быть обновлены. Если какие-либо строки будут пропущены, это приведет к несогласованности данных. Это называется аномалией обновления.


Образец для демонстрации аномалии обновления
Item_ID Customer_ID Customer_name Customer_address
1 921 Ryan 12E West End
2 921 Ryan 12E West End
3 728 John 44 Avenue Road

Если вы попытаетесь вставить запись для клиента, которая недоступна в основной таблице клиентов, это вызовет аномалию вставки. Если вы удалите Item_ID = 3 в таблице, это также удалит запись о покупателе John и его адрес 44 Avenue Road, потому что его данные связаны только с этим пунктом. Это называется аномалией удаления.

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

Первая нормальная форма


Первая нормальная форма (1NF) требует, чтобы поле таблицы содержало атомарные значения. Поле должно содержать только одно значение. Например, данные в таблице ниже не соответствуют 1NF, поскольку поле номера телефона содержит несколько значений для Emp_id = 2290.

Таблица сотрудники
Emp_id Emp_name Phone_num
2289 John 99889988
2290 Mark 88998899
99887755

Чтобы таблица соответствовала 1NF, ее следует скорректировать, как показано в таблице ниже, создав новую запись для второго телефонного номера в Emp_id 2290.

Таблица сотрудники
Emp_id Emp_name Phone_num
2289 John 99889988
2290 Mark 88998899
2290 Mark 99887755

Вторая нормальная форма

Чтобы таблица соответствовала второй нормальной форме (2NF), она должна соответствовать следующим критериям:
  1. Он должен соответствовать 1NF.
  2. Не ключевые поля таблицы должны полностью зависеть от всех полей первичного ключа, а не от подмножества ключевых полей.
Например, в таблице ниже, предположим, что поля Employee_ID и Department_ID являются полями первичного ключа. Согласно 2NF, непервичные поля Employee_name и Department_name должны полностью зависеть от полных полей первичного ключа Employee_ID и Department_ID, а не от подмножества полей первичного ключа.
Здесь это не так; поле Employee_name может быть идентифицировано полем Employee_ID, а поле Department_name может быть полностью идентифицировано полем Department_ID. Следовательно, непервичные поля этой таблицы лишь частично зависят от полей первичного ключа таблицы, что не допускается в 2NF.

Employee_ID Department_ID Employee_name Department_name
1122 01 John Sales
1123 02 Mark Finance
Чтобы таблица соответствовала 2NF, ее следует разделить на две таблицы, как показано в таблицах ниже. Это гарантирует отсутствие частичной зависимости от полей первичного ключа.


Employee_ID Department_ID Employee_name
1122 01 John
1123 02 Mark


Department_ID Department_name
01 Sales
02 Finance

Третья нормальная форма

Таблица соответствует третьей нормальной форме (3NF), если она соответствует 2NF и все неключевые поля таблицы взаимно независимы.

Например, таблица ниже, не соответствует третьей нормальной форме, поскольку поле «Итого» зависит от информации в неключевых полях «Количество» и «Цена». расчеты в запросе или отчете. Это гарантирует, что обновление одного из полей таблицы не приведет к каким-либо аномалиям.

ID Quantity Price Total
01 10 10 100
02 20 15 300

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

Перевод книги #Complete ABAP / Kiran Bandari

Комментарии