Читайте также:
|
|
К сожалению, даже отношения в третьей нормальной форме могут иметь аномалии. Рассмотрим отношение НАУЧНЫЙ_РУКОВОДИТЕЛЬ (рис. 4.6, а). Пусть требования к этому отношению таковы.
1. Студент может иметь одну или несколько специализаций.
2. Научными руководителями по одной и той же специализации могут быть несколько преподавателей.
3. Каждый преподаватель может осуществлять научное руководство только по одной специализации.
Будем также предполагать, что у преподавателей не бывает одинаковых фамилий.
Поскольку студенты могут специализироваться в нескольких областях, атрибут НомерСтудента не определяет атрибут Специализация. Более того, так как студент может иметь несколько научных руководителей, НомерСтудента не определяет и атрибут ИмяПреподавателя. Таким образом, сам по себе атрибут НомерСтудента не может играть роль ключа.
Рис. 4.6. Нормальная форма Бойса—Кодда: а — отношение, находящееся в ЗНФ, но не в НФБК; б — два отношения, находящиеся в НФБК
Комбинация (НомерСтудента, Специализация) определяет атрибут ИмяПреподавателя, а комбинация (НомерСтудента, ИмяПреподавателя) определяет атрибут Специализация. Следовательно, любая из этих комбинаций может быть ключом. Два или более атрибута или группы атрибутов, которые могут быть ключом, называются ключами-кандидатами (candidate keys). Тот из ключей-кандидатов, который выбирается в качестве ключа, называется первичным ключом (primary key).
Кроме ключей-кандидатов, есть еще одна функциональная зависимость, которую следует рассмотреть: атрибут ИмяПреподавателя определяет атрибут Специализация (любой из преподавателей является научным руководителем только по одной специализации; следовательно, зная имя преподавателя, мы можем определить эту специализацию). Таким образом, ИмяПреподавателя является детерминантом.
По определению, отношение НАУЧНЫЙ_РУКОВОДИТЕЛЬ находится в первой нормальной форме. Оно также находится во второй нормальной форме, поскольку не имеет неключевых атрибутов (каждый из атрибутов является частью по крайней мере одного ключа). Наконец, это отношение находится в третьей нормальной форме, так как не имеет транзитивных зависимостей. Тем не менее, несмотря на все это, отношение имеет аномалии модификации.
Пусть студент номер 300 отчисляется из университета. Если мы удалим строку с информацией об этом студенте, мы потеряем тот факт, что научным руководителем на кафедре психологии является некий Перлс. Это аномалия удаления. Далее, как мы можем записать в базу тот факт, что преподаватель Кейнс является научным руководителем на кафедре экономики? Никак, пока не появится хотя бы один студент, специализирующийся на экономике. Это аномалия вставки.
Ситуации, подобные только что описанной, приводят нас к определению нормальной формы Бойса—Кодда (Воусе—Codd normal form, BK/NF): отношение находится в НФБК, если каждый детерминант является ключом-кандидатом. Отношение НАУЧНЫЙ_РУК0В0ДИТЕЛЬ не находится в НФБК, поскольку детерминант ИмяПреподавателя не является ключом-кандидатом.
Как и в других примерах, отношение НАУЧНЫЙ_РУК0В0ДИТЕЛЬ можно разбить на два отношения, не имеющие аномалий. Например, отношения СТУДЕНТ—РУКОВОДИТЕЛЬ (НомерСтудента, ИмяПреподавателя) и РУКОВОДИТЕЛЬ—СПЕЦИАЛИЗАЦИЯ (Имя-Преподавателя, Специализация) не имеют аномалий.
Отношения в НФБК не имеют аномалий, относящихся к функциональным зависимостям, и некогда казалось, что вопрос с аномалиями модификации на этом исчерпан. Однако вскоре обнаружилось, что аномалии могут быть обусловлены и иными причинами, нежели функциональные зависимости.
Дата добавления: 2015-07-08; просмотров: 358 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Задачи к текущему материалу | | | ЯЗЫК SQL |