|
Программирование >> Реляционные базы данных
Теперь рассмотрим функциональную зависимость tSIe year -> length filmType studioName которая верна для Move. Напоминаем, почему она верна: исходный ODL-проект имеет ключ {title, year}, однозначные атрибуты length и fflmType. а также однозначную связь ownedBy, ведущую к студии, владеющей фильмом. К сожалению, левая часть этой зависимости ие являезтся надключом. В частности, известно, что title и year функшюнально не определяют шестой атрибут - starName. Значит, сушсствова1П1С такой зависимости нарушает условие BCNF и свидетельствует о том, что отношение Movie не находится в BCNF. Более того, согласно исходному определению BCNF. по которому п правой части должен быть единственный атрибут, нарушать BCNF может любая из трех функциональны.х зависимостей, например title year length. □ Пример 3.34. Отношение Moviel на рис. 3.3! находится в BCNF. Поскольку зависимость title year length filmType studioName перна и ни title, ни year сами по себе не определяют никакие другие атрибуты, единственный ключ для Moviel - {title, year). Более того, нетривиальные функциональные зависимости в своих левых частях должны иметь по крайней мере 1Ше н year, поэтому их левые части должны быть надключами. Таким образом, Moviel находится в BCNF. □ Пример S.35. Любое отношение с двумя атрибугами находится а BCNF. Для доказательства этого утвсрйшення нужно проверить возможные нетривиальные зависимости с единственным атрибутом справа. При этом необходимо рассмотреть всего четыре случая. Пусть имеются два атрибута А я В- 1. Нетривиальных функциональных зависимостей нет. Тогда условие BCNF должно вьнюлняться, так как нарушить его может только нетривиальная зависимость. Ксгати, в данном случае единственный ключ - это {А, Щ. 2. Верно А - В. но не верно В~*А. В этом случае А - единственный ключ и каждая нетривиальная зависимость содершгг А слева (фактически, спе-ва может стоять только А). 3Ha4vrr, условие BCNF ие нарушается. 3. Верно В-*А., но КС верно А~* В. Случай симметричен предыдущему. 4. Верно - В и Тогда >f и 5 ключи. Ясно, что любая зависимость имеет в левой части А или В, поэтому нарушений BCNF не может быть. Из пункта 4 следует, что для отношения может быть нескапько ключей. Однако, согласно условию BCNF, в левой части нетривиальной зависимости достаточно иметь некоторый ключ, а не все. Заметим также, что отношение с двумя атрибутами, функционально определяющими друг друга, не является абсолютно неправдоподобным. Например, компания может приписать своим сотрудникам уникальные ID (emplD) и одновременно записывать номера их страховых полисов (ssNo). В отношении с атрибутами empID и ssNo оба атрибута функционально определяют друг Друга. Другими стовями, каждый атрибут является ключом, поэтому не существует ДВУХ кортежей, совпадающих по одному из этих атрибугов. D Рис. 3.33. Декомпсаицип схемы отношения, осноеопюя но норушении BCNf Пример 3.36. Рассмотрим снова отношение Movie иа рис. 3.30. В примере 3.33 было показано, что title year length filmType studioName нарушает BCNF. В данном случае правая часть уже содержит все атрибуты, функционально определяемые атрибутами title и year. Поэтому мы используем данное нару1иение BCNF для декомпозиции Movie на: 1} схему со всеми атрибутами этой зависимости: {title, year, length, filmType, studioName) 2) схему со всеми атрибутами Movie, за исключением трех, входящих в правую часть зависимости Таким образом, удаляются length, filmType и StudioName и ос ается схема {title, year, starName) 3.7.4 Де1 омпозиция в BCNF Повторно применяя подходящие декомпозиции, можно разбить любую схему oTHomeiuifl на множество подмножеств его атрибутов со следующими вaжны.п1 свойствам н: 1. Эти подмножествй являются схемами отношений в BCNF. 2. Данные исходного отношения правильно представлены данными п отношениях, полученных в результате декомпозиции, в смысле, который будет уточнен в разделе 3.7.6. Строго говоря, нужно иметь возможность восстановить исходное отношение точно из отношений, полученных в пезультаге его декомпозиции. Судя по примеру 3.35, достаточно разбить схему отношения на двухатрибутив-ные подмножества, чтобы результат наверняка был в BCNF. Однако, как будет показано в разделе 3.6.7, такая произвольная декомпозиция ие удогзлетворяет условию 2. Просто нужно быть более внимательным и при декомпозиции руководствоваться функциональными зависимостями, нарушающими BCNF. В процессе декомпозиции будем следовать стратегии поиска нетривиальной функциональной зависимости , А ... Д,-> 5, ... В которая нарушает BCNF; т.е. А,Л) не явтяется надключом. В качестве эвристического приема добавим в правую часть зависимости атрибуты, функционально определенные множеством {А А- .. , А ). На рис, 3.33 показано разбиение атрибутов на две пересекающиеся схемы отношений. Первая - это все атрибуты, входящие в нарушающую зависимость, вторая - левая часть зависимости плюс все атрибуты, не входящие в эту зависимость, т.е. все атрибуты, за исключением тех В которые не совпадают с /I,. Заметим, что именно эти схемы выбирались для отношений Moviel и Movie2 в примере 3.32. В примере 3.34 было показано, что обе они находятся в BCNF. □ Пример 3.37. Рассмотрим отношение MovieStudio, введенное в примере 3.30. В нем хранится информация о фильмах, владеющих ими студиях и адресах этих студий. С ма и некоторые типичные кортежи этого отношения показаны на рис. 3.34.
Рие. 3.34. Отношение MovieStudio Зто отношение содержггг избыточную информацию. Поскольку к обычным данным здесь добавлена запись о фильме, которым владеет Paramount, адрес этой студии повторяется дваж,аы. Однако источник этой проблемы иной, нежели в примере 3.36. В предыдущем примере проблема заключалась в том, что многозначная связь (кинозвезды данного фильма) храншгась вместе с другой информацией о фильме. Здесь же все однозначно: атрибут фильма length, связь ownedBy фильма с единственной владеющей им студией и атрибут студий address. В данном случае проблема в транзитивной зависимости. Как показано в примере 3.30, отношение movieStudio имеет две зависимости: title year -+ studioName StudioName -> studloAddr По правилу транзитивности можно получить title year-* studloAddr Значит, название и год выпуска фильма (т.е. ключ для фильмов) функционально определяют адрес студии, владеющей фильмом. Но title year - length filmType является очевидной зависимостью, следовательно, (title.year) - ключ для MovieStudio, фактически, единственным. С другой стороны, зависимость StudioName > studloAddr которая использовалась при применении правила транзитивности, нетривиальна, но ее левая часть не является надключом. Значит, отношение MovieStudio не находится в BCNF. Используя эту зависимость, можно решить рассматриваемую проблему согласно правилу деко.мпозиции. Первая схема декомпозиции - атрибуты самой данной зaвиcиrocти: {StudioName, studloAddr) Вторая с.чема - все атрибуты MovieStudio. за исключением studloAddr, так кик последний находится в правой часта зависимости, используемой в декомпозиции. Значит, второй cxeюй является {title, year, length, filmType, studioName)
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |