2.4.3 Пример нормализации данных

iDevice ikoon 2.4.3 Пример нормализации данных

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

Первая нормальная форма (1 NF): говорят, что таблица находится в первой нормальной форме, если она описывает одну сущность и не содержит векторов и повторяющихся  атрибутов. Рассмотрим, например, таблицу, которая содержит данные  занятий одного курса.  Для каждой строки занятия имеются код,   данные учителя и ученика. Таблица не  находится в первой нормальной форме, поскольку данные ученика - это вектор,  соответствующий занятию.

 

Код предмета

Предмет

Учитель

Код ученика

Фамилия ученика

 

Имя ученика

A01

Проектирование

Линд

S01

Роовяли

Марек

 

 

 

S02

Петерсон

Мария

 

 

 

S03

Мартсон

Элла

A02

Построение

Сепп

S02

Петерсон

Мария

 

 

 

S03

Мартсон

Элла

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

Занятия

Предмет

Учитель

Проектирование

Линд

Построение

Сепп

 

Зарегистрированные учащиеся

Код предмета

Код ученика

Фамилия ученика

Имя ученика

A01

S01

Роовяли

Марек

A01

S02

Петерсон

Мария

A01

S03

Мартсон

Элла

A02

S02

Петерсон

Мария

A02

S03

Мартсон

Элла

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

Для приведения таблицы во вторую нормальную форму, мы должны вывести  данные, которые  не зависят совсем от первичного ключа, и включить эти данные в новую таблицу «Ученики». Стоит отметить, что потери информации не происходит, поскольку столбец кода ученика  имеется в обеих таблицах, что допускает  взаимосвязи между  этими таблицами.

Зарегистрированные учащиеся

 

Ученики

Код предмета

Код ученика

 

Код ученика

Фамилия ученика

Имя ученика

A01

S01

 

S01

Роовяли

Марек

A01

S02

 

S02

Петерсон

Мария

A01

S03

 

S03

Мартсон

Элла

A02

S02

 

 

 

 

A02

S03

 

 

 

 

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

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

 

Ученики

Код

Фамилия

Имя

Дата рождения

Возраст

Последнее обновление

S01

Роовяли

Марек

11.09.1955

50

12.11.2001

S02

Петерсон

Мария

01.02.1990

14

15.12.2004

S03

Мартсон

Элла

09.06.1978

26

26.01.2005

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

 

Занятия

Код предмета

Предмет

Учитель

Сидячие места в помещении

Свободные места

A01

Проектирование

Линд

5

2

A02

Построение

Сепп

6

4

 

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