Аномалии, вызываемые наличием зависимости проекции/соединения
В переменной отношения СЛУЖ_ПРО_ЗАДАН выполняется 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> не нарушает ограничения целостности и не требует дополнительных удалений.