Нормализация
Нормализация — это процесс упрощения структуры базы данных. Нормализация отвечает на основные вопросы, касающиеся необходимого количества таблиц, того, что представляет каждая таблица, количества полей в каждой таблице и отношений между таблицами. Нормализация также помогает избежать избыточности и аномалий в структуре базы данных.
Аномалии могут возникать при вставке, обновлении или удалении записей из таблицы базы данных (если база данных плохо спроектирована). Например, если у вас есть таблица базы данных, как показано в таблице, когда запись обновляется для изменения адреса клиента, все строки, в которых существует запись клиента, должны быть обновлены. Если какие-либо строки будут пропущены, это приведет к несогласованности данных. Это называется аномалией обновления.
Образец для демонстрации аномалии обновления
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), она должна соответствовать следующим критериям:
- Он должен соответствовать 1NF.
- Не ключевые поля таблицы должны полностью зависеть от всех полей первичного ключа, а не от подмножества ключевых полей.
Например, в таблице ниже, предположим, что поля 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
Комментарии
Отправить комментарий