Нормализация отношений
Нормализация – это процесс уменьшения избыточности информации в БД с целью получения наиболее эффективных и гибких способов хранения данных. Нормализация отношений представляет собой структурный метод ликвидации избыточности и несогласованности. При проектировании реляционной БД необходимо создать наиболее эффективную структуру данных, которая должна обеспечить:
1. быстрый доступ к данным БД;
2. исключить из структуры таблицы ненужное повторение данных, которое приводит к нерациональному употреблению дискового пространства и ошибкам при вводе;
3. целостность данных: при изменении одних объектов автоматически соответствующим образом изменяются связанные с ними объекты.
Теорию нормализации отношений в реляционной модели разработал Э. Кодд. Сначала использовалось 3 нормальные формы, позже были выделены еще две, т.е. разработаны 5 нормальных форм таблиц. Каждая последующая (от 1 до 5) нормальная форма должна удовлетворять требованиям предыдущей и некоторым дополнительным условиям. 4 и 5 формы при практическом проектировании, как, правило, не применяются.
Рассмотрим, какие проблемы могут возникнуть из-за небрежного проектирования БД и как их избежать при помощи стандартных принципов, называемых нормализацией.
Таблица 10.
Пример ненормализованной БД
Работник | |||
Код работника | ФИО | Тип специальности | Код здания |
Петров И.И. | электрик | ||
Петров И.И. | электрик | ||
Сидоров В.В. | штукатур | ||
Сидоров В.В. | штукатур | ||
Сидоров В.В. | штукатур | ||
Сидоров В.В. | штукатур | ||
Корнеев А.А. | электрик |
Реляционная таблица10 спроектирована неудачно. В 4-х кортежах, соответствующих рабочему 1412, повторяется одно и то же имя и информация о типе специальности. Эта избыточность данных или повторение приводит не только к потере лишнего места; она может вызвать нарушение целостности данных в БД.
Проблема возникает из-за того, что один и тот же работник может работать более чем на одном здании. Предположим, что специальность Сидорова была указана неправильно, а исправление было введено только в первый кортеж. Тогда между кортежами, содержащими информацию о Сидорове, возникнет несоответствие, которое называется аномалией обновления.
Аномалия обновления. Противоречивость данных, вызванная избыточностью и частичным обновлением.
Теперь предположим, что Сидоров в течение 3-х месяцев был на больничном, и все здания, на которые он был назначен работать, уже закончены. Если принимается решение удалить все строки о законченных зданиях из таблицы, то информация о рабочем Сидорове будет потеряна. Это называется аномалией удаления.
Аномалия удаления. Непреднамеренная потеря данных, вызванная удалением других данных.
Обратный случай: могли нанять нового работника по имени Королев, которого еще не успели назначить ни на какое здание. Если мы не допускаем пустых значений, то не можем ввести информацию о Королеве в БД. Это называется аномалией ввода.
Аномалия ввода. Невозможность ввести данные в таблицу, вызванная отсутствием других данных.
Аномалии ввода, удаления и обновления нежелательны. Чтобы свести к минимуму эти проблемы нужно разделить реляционную таблицу Работник на две таблицы Работник и Назначение. Это решение интуитивное. Воспользуемся нормальными формами или правилами структурирования таблиц.
Дата добавления: 2016-05-31; просмотров: 1920;