Нормализация реляционной модели данных По учебнику Семакин Н.Г., Хеннер Е.К. Информационные системы и модели © 2006 Медведев Л.Н.
Реляционная модель данных это множество взаимосвязанных отношений
Постановка задачи Построить БД успеваемости учеников в классе Интересуют четвертные и годовые оценки по всем учебным предметам В БД надо хранить адреса учеников Чтобы отличать мальчиков от девочек, надо указывать пол ученика
Решение в лоб Отношение, включающее в себя все перечисленные данные, будет следующим: УСПЕВАЕМОСТЬ (ФАМИЛИЯ, ИМЯ, ПРЕДМЕТ, ПОЛ, АДРЕС, 1ЧЕТВ, 2_ЧЕТВ, 3_ЧЕТВ, 4_ЧЕТВ, ГОД)
Критика простого решения Недостаток хранения данных в таком виде - это их избыточность. Избыточность - это многократное повторение одних и тех же данных. Она ведет к лишнему расходу памяти компьютера. При вводе повторяющихся значений в каких-то строках могут быть ошибки. Например, по-разному записан один и тот же адрес в нескольких местах. Такая ситуация называется противоречивостью данных.
Решение проблем - нормализация Решением этих проблем является разбиение данного отношения на два, т.е. переход от однотабличной модели к двухтабличной.
Практическое решение УЧЕНИКИ (НОМЕР_УЧ, ФАМИЛИЯ, ИМЯ, ПОЛ, АДРЕС) УСПЕВАЕМОСТЬ (НОМЕР УЧ, ПРЕДМЕТ, 1 ЧЕТВ, 2 ЧЕТВ, 3 ЧЕТВ, 4 ЧЕТВ, ГОД) Связь отношений имеет тип «один-ко-многим» и осуществляется через общее поле НОМЕР_УЧ. В таблице УЧЕНИКИ это поле - первичный ключ. В таблице УСПЕВАЕМОСТЬ оно - в составном ключе. Следовательно, конкретное значение этого поля в первой таблице может присутствовать только в одной записи, а во второй во множестве записей.
Основная цель нормализации - … … избавление от избыточности данных. В идеале не избыточная база данных должна хранить каждый факт в одном экземпляре. Для каждого ученика его атрибуты: ФАМИЛИЯ, ИМЯ, ПОЛ, АДРЕС будут заноситься в базу однократно. Если значения каких-то атрибутов изменятся, - их можно легко исправить. Пример: изменился адрес ученика. В первом варианте структуры данных его придется переписывать многократно. В окончательном варианте это нужно будет сделать один раз.
Первая нормальная форма Отношение находится в первой нормальной форме, если все его поля являются атомарными. Атомарное поле далее не делится. Пример: объединение в одно поле «ФИО» фамилии, имени и отчества человека нарушает принцип атомарности. Понятие атомарности относительно. Пример: если в приложениях не потребуется отдельной обработки деталей адреса конторы, то адрес можно не разбивать на составляющие и считать его атомарным.
Вторая нормальная форма Отношение находится во второй нормальной форме, если оно находится в первой нормальной форме, и все его неключевые поля полностью функционально зависят от первичного ключа. Значение неключевого поля в каждой записи однозначно связано со значением ключа этой записи. Отношения УЧЕНИКИ и УСПЕВАЕМОСТЬ обладают этим свойством. У данного ученика (ключ: НОМЕР УЧ.) определенный адрес, фамилия, дата рождения и пр. У данного ученика по данному предмету (ключ: НОМЕР УЧ.+ПРЕДМЕТ) определенные оценки за четверти и за год.
Пример отсутствия функциональной зависимости: значение поля 1 ЧЕТВ не зависит от поля АДРЕС. У данного ученика может измениться АДРЕС, но это не ведет к изменению оценки за 1-ю четверть по математике.
Третья нормальная форма Требование: удовлетворение второй нормальной форме и отсутствие в отношении полей, транзитивно зависимых от ключа. Транзитивной зависимостью между полями А и В называется зависимость через третье поле С: А С В. Например, если бы в отношении УЧЕНИКИ и присутствовало поле РАЙОН (города, где живет ученик), то имела бы место транзитивная зависимость. Район однозначно связан с адресом, поэтому транзитивность следующая: НОМЕР_УЧ АДРЕС РАЙОН
В построенных нами отношениях транзитивных зависимостей нет, поэтому полученная нами двухтабличная модель данных удовлетворяет требованию третьей нормальной формы.
Коротко о главном Нормализация отношений в реляционной модели данных исключает избыточность и противоречивость данных. Структура реляционной базы данных должна удовлетворять требованиям третьей нормальной формы: все поля в отношениях должны быть атомарными; все неключевые поля должны полностью функционально зависеть от первичного ключа; должны отсутствовать транзитивные зависимости.