ВУЗ:
Составители:
Рубрика:
1
2
1
2
1
2
3
1
3
3
2
2
Анализ декомпозированных отношений.
Отношения, полученные в результате декомпозиции,
находятся в 2НФ. Действительно, отношения
СОТРУДНИКИ_ОТДЕЛЫ
и
ПРОЕКТЫ
имеют простые
ключи, следовательно, автоматически находятся в 2НФ, отношение
ЗАДАНИЯ
имеет сложный ключ, но
единственный неключевой атрибут
Н_ЗАДАН
функционально зависит от всего ключа
{Н_СОТР,
Н_ПРО}
.
Часть аномалий обновления устранена. Так, данные о сотрудниках и проектах теперь хранятся в
различных отношениях, поэтому при появлении сотрудников, не участвующих ни в одном проекте,
просто добавляются кортежи в отношение
СОТРУДНИКИ_ОТДЕЛЫ
. Точно так же при появлении про-
екта, над которым не работает ни один сотрудник, просто вставляется кортеж в отношение
ПРОЕКТЫ
.
Фамилии сотрудников и наименования проектов теперь хранятся без избыточности. Если сотрудник
сменит фамилию или проект сменит наименование, то такое обновление будет произведено в одном
месте.
Если по проекту временно прекращены работы, но требуется, чтобы сам проект сохранился, то для
этого проекта удаляются соответствующие кортежи в отношении
ЗАДАНИЯ
, а данные о самом проекте
и данные о сотрудниках, участвовавших в проекте, остаются в отношениях
ПРОЕКТЫ
и
СОТРУДНИ-
КИ_ОТДЕЛЫ
.
Тем не менее часть аномалий разрешить не удалось.
Оставшиеся аномалии вставки
(
INSERT
). В отношение СОТРУДНИКИ_ОТДЕЛЫ нельзя вста-
вить кортеж (4, Пушников, 1, 33-22-11), так как при этом получится, что два сотрудника из 1-го отдела
(Иванов и Пушников) имеют разные номера телефонов, а это противоречит модели предметной облас-
ти. В этой ситуации можно предложить два решения в зависимости от того, что реально произошло в
предметной области. Другой номер телефона может быть введён по двум причинам – по ошибке чело-
века, вводящего данные о новом сотруднике, или потому что номер в отделе действительно изменился.
Тогда можно написать триггер, который при вставке записи о сотруднике проверяет, совпадает ли теле-
фон с уже имеющимся телефоном у другого сотрудника этого же отдела. Если номера отличаются, то
система должна задать вопрос, оставить ли старый номер в отделе или заменить его новым. Если нужно
оставить старый номер (новый номер введён ошибочно), то кортеж с данными о новом сотруднике будет
вставлен, но номер телефона будет у него тот, который уже есть в отделе (в данном случае 11-22-33). Ес-
ли же номер в отделе действительно изменился, то кортеж будет вставлен с новым номером и одновре-
менно будут изменены номера телефонов у всех сотрудников этого же отдела. И в том и в другом слу-
чае не обойтись без разработки громоздкого триггера.
Причина аномалии – избыточность данных, порождённая тем, что в одном отношении хранится
разнородная информация (о сотрудниках и об отделах).
Вывод. Увеличивается сложность разработки базы данных. База данных, основанная на такой мо-
дели, будет работать правильно только при наличии дополнительного программного кода в виде триг-
геров.
Оставшиеся аномалии обновления
(
UPDATE
). Одни и те же номера телефонов повторяются во
многих кортежах отношения. Поэтому если в отделе меняется номер телефона, то такие изменения не-
обходимо одновременно выполнить во всех местах, где этот номер телефона встречается, иначе отно-
шение станет некорректным. Таким образом, обновление базы данных одним действием реализовать
невозможно. Необходимо написать триггер, который при обновлении одной записи корректно исправ-
ляет номера телефонов в других местах.
Причина аномалии – избыточность данных, также порождённая тем, что в одном отношении хра-
нится разнородная информация.
Страницы
- « первая
- ‹ предыдущая
- …
- 25
- 26
- 27
- 28
- 29
- …
- следующая ›
- последняя »