Работа с базами данных на языке C#. Технология АDO .NET. Евсеева О.Н - 14 стр.

UptoLike

Составители: 

14
Давайте проанализируем отношение «Туристы». Рассмотрим зависимости
между атрибутами «Код туриста», «Фамилия», «Имя», «Отчество» и «Паспорт»
(рис. 3). Каждый турист, представленный в отношении сочетанием «Фамилия-
Имя-Отчество», имеет на время поездки только один паспорт, при этом полные
тезки должны иметь разные номера паспортов. Поэтому атрибуты «Фамилия-
Имя-Отчество» и «Паспорт» образуют в отношении туристы составной ключ.
Как видно из рисунка, атрибут «Паспорт» транзитивно зависит от ключа
«Код туриста». Поэтому, чтобы исключить данную транзитивную зависимость,
разобьем составной ключ отношения и само отношение на 2 по связям
«один-к-одному». В первое отношение, оставим ему имя «Туристы», включа-
ются атрибуты «Код туриста» и «Фамилия», «Имя», «Отчество». Второе отно-
шение, назовем его «Информация о туристах», образуют атрибуты «Код тури-
ста» и все оставшиеся атрибуты отношения «Туристы»: «Паспорт», «Телефон»,
«Город», «Страна», «Индекс». Эти два новых отношения уже не имеют транзи-
тивной зависимости и находятся в 3НФ.
Многозначные зависимости в нашей упрощенной БД отсутствуют. Для
примера предположим, что для каждого туриста должны храниться несколько
контактных телефонов (домашний, рабочий, сотовый и пр., что весьма харак-
терно на практике), а не один, как в примере. Получаем многозначную зависи-
мость ключа – «Код туриста» и атрибутов «Тип телефона» и «Телефон», в этой
ситуации ключ перестает быть ключом. Что делать? Проблема решается также
путем разбиения схемы отношения на 2 новые схемы. Одна из них должна
представлять информацию о телефонах (отношение «Телефоны»), а вторая о
туристах (отношение «Туристы»), которые связываются по полю «Код тури-
ста». «Код туриста» в отношении «Туристы» будет первичным ключом, а в от-
ношении «Телефоны» – внешним.
Составной ключ
Код туриста
Фамилия Имя Отчество
Паспорт
1
1 1
1
1
Рис. 3. Пример транзитивной зависимости