Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы данных.doc
Скачиваний:
114
Добавлен:
16.03.2016
Размер:
5.67 Mб
Скачать

9.2. Многозначные зависимости и четвертая нормальная форма

Чтобы перейти к вопросам дальнейшей нормализации, рассмотрим еще одну возможную (четвертую) интерпретацию переменной отношения СЛУЖ_ПРО_ЗАДАН. Предположим, что каждый служащий может участвовать в нескольких проектах, но в каждом проекте, в котором он участвует, им должны выполняться одни и те же задания. Возможное значение четвертого варианта переменной отношенияСЛУЖ_ПРО_ЗАДАНпоказано нарис. 9.1.

Рис. 9.1.Возможное значение переменной отношения СЛУЖ_ПРО_ЗАДАН (четвертый вариант)

9.2.1. Аномалии обновлений при наличии многозначных зависимостей и возможная декомпозиция

В новом варианте переменной отношения единственным возможным ключом является заголовок отношения {СЛУ_НОМ, ПРО_НОМ, СЛУ_ЗАДАН}. Кортеж{сн, пн, сз}входит в тело отношения в том и только в том случае, когда служащий с номеромснвыполняет в проектепнзаданиесз. Поскольку для каждого служащего указываются все проекты, в которых он участвует, и все задания, которые он должен выполнять в этих проектах, для каждого допустимого значения переменной отношенияСЛУЖ_ПРО_ЗАДАНдолжно выполняться следующее ограничение (BСПЗобозначает тело отношения):

IF ({сн, пн1, сз1}BСПЗAND {сн, пн2, сз2}BСПЗ)

THEN ({сн, пн1, сз2}BСПЗAND {сн, пн2, сз1}BСПЗ)

Наличие такого ограничения (как мы скоро увидим, это ограничение порождается наличием многозначной зависимости) приводит к тому, что при работе с отношением СЛУЖ_ПРО_ЗАДАНпроявляются аномалии обновления.

  • Добавление кортежа.Если уже участвующий в проектах служащий присоединяется к новому проекту, то к телу значения переменной отношенияСЛУЖ_ПРО_ЗАДАНтребуется добавить столько кортежей, сколько заданий выполняет этот служащий.

  • Удаление кортежей.Если служащий прекращает участие в проектах, то отсутствует возможность сохранить данные о заданиях, которые он может выполнять.

  • Модификация кортежей.При изменении одного из заданий служащего необходимо изменить значение атрибутаСЛУ_ЗАДАНв стольких кортежах, в скольких проектах участвует служащий.

Трудности, связанные с обновлением переменной отношения СЛУЖ_ПРО_ЗАДАН, решаются путем его декомпозиции на две переменных отношений:СЛУЖ_ПРО_НОМ {СЛУ_НОМ, ПРО_НОМ}иСЛУЖ_ЗАДАНИЕ {СЛУ_НОМ, СЛУ_ЗАДАН}. Значения этих переменных отношений, соответствующие значению переменной отношенияСЛУЖ_ПРО_ЗАДАНсрис. 9.1, показаны нарис. 9.2.

Легко видеть, что декомпозиция, представленная на рис. 9.2, является декомпозицией без потерь и что эта декомпозиция решает перечисленные выше проблемы с обновлением переменной отношенияСЛУЖ_ПРО_ЗАДАН.

Рис. 9.2.Значения переменных отношений СЛУЖ_ПРО_НОМ и СЛУЖ_ЗАДАНИЕ

  • Добавление кортежа.Если некоторый уже участвующий в проектах служащий присоединяется к новому проекту, то к телу значения переменной отношенияСЛУЖ_ПРО_НОМтребуется добавить один кортеж, соответствующий новому проекту.

  • Удаление кортежей.Если служащий прекращает участие в проектах, то данные о заданиях, которые он может выполнять, остаются в отношенииСЛУЖ_ЗАДАНИЕ.

  • Модификация кортежей.При изменении одного из заданий служащего необходимо изменить значение атрибутаСЛУ_ЗАДАНв одном кортеже отношенияСЛУЖ_ЗАДАНИЕ.