Аномалии, вызываемые наличием зависимости проекции/соединения

 

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

 

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

 

СЛУ_НОМ ПРО_НОМ СЛУ_ЗАДАН
B
A

 

Результат добавления к ТСПЗ1кортежа <2941, 1, A> (ТСПЗ2)

 

СЛУ_НОМ ПРО_НОМ СЛУ_ЗАДАН
B
A
A
A

 

Рис. 8.4. Иллюстрации аномалий обновления в отношении СЛУЖ_ПРО_ЗАДАН

при наличии зависимости соединения

 

· Добавление кортежей. Если к ТСПЗ1 (рис. 8.4) добавляется кортеж <2941, 1, A>, то должен быть добавлен и кортеж <2934, 1, A>. Действительно, в теле отношения появятся кортежи <2934, 1, B>, <2941, 1, A> и <2934, 2, A>. Ограничение целостности требует включения и кортежа <2934, 1, A>. Интересно, что добавление кортежа <2934, 1, A> не нарушает ограничение целостности и, тем самым, не требует добавления кортежа <2941, 1, A>.

· Удаление кортежа. Если из ТСПЗ2удаляется кортеж <2934, 1, A>, то должен быть удален и кортеж <2941, 1, A>, поскольку в соответствии с ограничением целостности наличие второго кортежа влечет наличие первого. Интересно, что удаление кортежа <2941, 1, A> не нарушает ограничения целостности и не требует дополнительных удалений.