Следует различать простое (петбыточное) и избыточное дублирование данных. Первое из них вполне естественно, второе может приводить к проблемам при обработке данных. Приведем примеры обоих вариантов дублирования.
Пример неизбыточного дублирования данных представляет приведенное на рис. 19.4 отношение С_Т с атрибутами Сотрудник и Телефон. Для сотрудников, находящихся в одном помещении, номера телефонов совпадают. Номер телефона 4328 встречается несколько раз, хотя для каждого служащего номер телефона уникален. Поэтому ни один из номеров не является избыточным. Действительно, при удалении одного из номеров телефонов будет утеряна информация о том, по какому номеру можно дозвониться до одного из служащих.
Пример избыточного дублирования представляет приведенное на рис. 19.5 а отношение С_Т_Н, которое, в отличие от отношения С_Т, дополнено атрибутом Н_комн (номер комнаты сотрудника). Естественно предположить, что все служащие в одной комнате имеют один и тот же телефон. Следовательно, в рассматриваемом отношении
С_Т
Сотрудник | Телефон |
Иванов | 3721 |
Петров | 4328 |
Сидоров | 4328 |
Егоров | 4328 |
Рис. 19.4 Неизбыточное дублирование
235
имеется избыточное дублирование данных. Так, в связи с тем, что Сидоров и Егоров находятся в той же комнате, что и Петров, то их номера-можно узнать из кортежа со сведениями о Петрове. На рис. 19.5 б приведен пример неудачного отношения С_Т_Н, в котором вместо телефонов Сидорова и Егорова поставлены "прочерки" (неопределенные значения). Неудачность подобного способа исключения избыточности заключается
С_Т_Н
а)
Служащий | Телефон | Н_комн |
Иванов | 37-21 | 109 |
Петров | 43-28 | 111 |
Сидоров | 4328 | 111 |
Егоров | 4328 | 111 |
С_Т_Н
б)
Служащий | Телефон | Н_коми |
Иванов | 3721 | 109 |
Петров | 4328 | 111 |
Сидоров | - | 111 |
Егоров | - | 111 |
Рис. 19.5. Избыточное дублирование
в следующем. Во-первых, при программировании придется потратить дополнительные усилия на создание механизма поиска информации для "прочерков" таблицы.