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