
- •Базы данных Базы данных и информационные системы
- •Архитектура информационной системы
- •Модели данных
- •Системы управления базами данных
- •Реляционная модель данных Элементы реляционной модели
- •Ограничения и операции над отношениями
- •Проектирование реляционных бд
- •Избыточное дублирование данных и аномалии
- •Формирование исходного отношения
- •Проектирование бд методом нормальных форм
- •Зависимости между атрибутами
- •Выявление зависимостей между атрибутами
- •Нормальные формы
- •Обеспечение целостности бд
- •Средства защиты бд
- •Языки запросов qbe и sql
- •Язык запросов по образцу
- •Структурированный язык запросов
- •Типы данных в базах данных
Избыточное дублирование данных и аномалии
Следует различать простое (неизбыточное) и избыточное дублирование данных. Первое из них вполне естественно, второе может приводить к проблемам при обработке данных. Приведем примеры обоих вариантов дублирования.
Пример неизбыточного дублирования данных представляет приведенное в таблице отношение Сотрудник_Телефон с атрибутами Сотрудник и Телефон. Для сотрудников, находящихся в одном помещении, номера телефонов совпадают. Номер телефона 4328 встречается несколько раз, хотя для каждого служащего номер телефона уникален. Поэтому ни один из номеров не является избыточным. Действительно, при удалении одного из номеров телефонов будет утеряна информация о том, по какому номеру можно дозвониться до одного из служащих.
Сотрудник |
Телефон |
Иванов |
3721 |
Петров |
4328 |
Сидоров |
4328 |
Егоров |
4328 |
Пример избыточного дублирования представляет приведенное в следующей таблице а) отношение Сотрудник_ Телефон_ № комнаты, которое, в отличие от отношения Сотрудник_ Телефон, дополнено атрибутом № комнаты (номер комнаты сотрудника). Естественно предположить, что все служащие в одной комнате имеют один и тот же телефон. Следовательно, в рассматриваемом отношении имеется избыточное дублирование данных. Так, в связи с тем, что Сидоров и Егоров находятся в той же комнате, что и Петров, то их номера можно узнать из записи со сведениями о Петрове. В таблице б) приведен пример неудачного отношения Сотрудник_ Телефон_ № комнаты, в котором вместо телефонов Сидорова и Егорова поставлены «прочерки» (неопределенные значения).
а) б)
Служащий |
Телефон |
№ комнаты |
|
Служащий |
Телефон |
№ комнаты |
Иванов |
37-21 |
109 |
|
Иванов |
3721 |
109 |
Петров |
43-28 |
111 |
|
Петров |
4328 |
111 |
Сидоров |
4328 |
111 |
|
Сидоров |
— |
111 |
Егоров |
4328 |
111 |
|
Егоров |
— |
111 |
Неудачность подобного способа исключения избыточности заключается в следующем:
Во-первых, при программировании придется потратить дополнительные усилия на создание механизма поиска информации для «прочерков» таблицы. Во-вторых, память все равно выделяется под атрибуты с «прочерками», хотя дублирование данных и исключено. В-третьих, что особенно важно, при исключении из коллектива Петрова запись со сведениями о нем будет исключена из отношения, а значит, уничтожена информация о телефоне 111-й комнаты, что недопустимо.
Возможный способ выхода из данной ситуации - два отношения Сотрудник_ № комнаты и № комнаты _Телефон, полученные путем декомпозиции исходного отношения Сотрудник_ Телефон_ № комнаты. Первое из них содержит информацию о номерах комнат, в которых располагается сотрудники, а второе — информацию о номерах телефонов в каждой из комнат. Теперь, если Петрова и уволят из учреждения и, как следствие этого, удалят всякую информацию о нем из баз данных учреждения, то это не приведет к утере информации о номере телефона в 111-й комнате.
Сотрудник_ № комнаты № комнаты _Телефон
Служащий |
№ комнаты |
|
№ комнаты |
Телефон |
Иванов |
109 |
|
109 |
3721 |
Петров |
111 |
|
111 |
4328 |
Сидоров |
111 |
|
|
|
Егоров |
111 |
|
|
|
Процедура декомпозиции отношения Сотрудник_ Телефон_ № комнаты на два отношения Сотрудник_ № комнаты и № комнаты _Телефон является основной процедурой нормализации отношений.
Избыточное дублирование данных создает проблемы при обработке записей отношения, названные Э. Коддом аномалиями обновления отношения. Он показал, что для некоторых отношений проблемы возникают при попытке удаления, убавления или редактировании их записей. Проблемы удаления и добавления записей, в принципе, снимаются в современных СУБД появлением в них значений для полей таблиц типа Null — неопределенных значений (пустых ячеек).