Скачиваний:
128
Добавлен:
02.05.2014
Размер:
2.3 Mб
Скачать

10.1. Введение

В этой главе речь пойдет о концепции функциональной зависимости, которая если "не совсем фундаментальна, то очень близка к таковой" [10.7]. Эта концепция лежит в основе многих обсуждаемых в последующих главах тем, включая, в частности, теорию проектирования базы данных, описанную в главе 11.

По сути, функциональная зависимость (далее для ее обозначения часто будет исполь­зоваться аббревиатура ФЗ) является связью типа "многие к одному" между множества­ми атрибутов внутри данной переменной-отношения. Например, для переменной-отношения поставок SP существует функциональная зависимость между множествами атрибутов {Sf ,Р|} и {QTY}. Это означает, что для любого допустимого значения этой пе­ременной-отношения справедливы следующие правила.

  • Для любой заданной пары значений атрибутов Si и Pt существует только одно со­ответствующее им значение атрибута QTY.

  • Многие разные пары значений атрибутов St и Pt могут иметь одно и то же соот­ветствующее им значение атрибута QTY (в общем случае).

Обратите внимание, что в показанном на рис. 3.8 примере значения переменной-отношения SP удовлетворяют этим правилам.

В разделе 10.2 этой главы концепция функциональной зависимости определяется бо­лее точно, с разделением функциональных зависимостей на выполняемые лишь в неко­торых частных случаях и выполняемые всегда. Как говорилось выше, функциональные зависимости представляют собой основу для применения научного подхода к решению нескольких практических задач, поскольку обладают богатым набором интересных фор­мальных свойств, позволяющих формально и строго решить многие проблемы. Ниже, в разделах 10.3-10.6, будут подробно описаны некоторые из этих формальных свойств и даны объяснения по поводу их практического применения. В конце главы, в разде­ле 10.7, представлено краткое резюме.

Замечание. При первом чтении этой главы многие разделы можно пропустить, поскольку большая часть материала, необходимого для понимания проводимого в последующих главах обсуждения, содержится в разделах 10.2 и 10.3. Поэтому все остальные разделы можно лишь просмотреть, а затем вновь вернуться к ним, озна­комившись со остальными тремя главами этой части.

Небольшое замечание в отношении используемой терминологии. В англоязычной литературе одновременно употребляются два термина; functional dependence и functional dependency. Согласно нормам использования английского языка термин "dependence" следовало бы применять для обозначения самой функциональной зави­симости, а термин "dependency" — для обозначения зависимых объектов. Однако термин "функциональная зависимость" часто приходится применять во множествен­ном числе, а в таких случаях термин "dependencies" кажется более удобным для произношения, чем "dependences". Именно это и определяет смешанное использова­ние обоих терминов.

10.2. Основные определения

Для демонстрации основных идей данного раздела используется несколько изменен­ная версия переменной-отношения поставок, которая в дополнение к обычным атрибу­там Si, Pi и QTY будет содержать также атрибут CITY, представляющий город соответст­вующего поставщика. Во избежание путаницы далее эту измененную переменную-отношение мы будем называть SCP. Она представлена на рис. 10.1 в виде таблицы.

s#

CITY

P#

QTY

SI

London

PI

100

SI

London

P2

100

S2

Paris

PI

200

S2

Paris

P2

200

S3

Paris

P2

300

S4

London

P2

400

S4

London

P4

400

S4

London

P5

400

Рис. 10.1. Пример значения переменной-отношения SCP

Следует четко различать а) значение переменной-отношения в определенный момент; б) набор всех возможных значений, которые переменная-отношение может принимать в различные моменты. Сначала дадим определение концепции функциональной зависимо­сти для п. а, а затем — для п. б.

■ Пусть г является отношением, а X и Y — произвольными подмножествами множе­ства атрибутов отношения г. Тогда Y функционально зависимо от X, что в сим­волическом виде записывается как

X -> Y

(читается либо как "X функционально определяет Y", либо как "X стрелка Y") то­гда и только тогда, когда каждое значение множества X отношения г связано в точности с одним значением множества Y отношения г. Иначе говоря, если два кортежа отношения г совпадают по значению X, они совпадают и по значению Y.

Например, отношение scp (см. рис. 10.1) удовлетворяет требованиям для приведен­ной ниже функциональной зависимости, поскольку все кортежи отношения scp с одина­ковыми значениями атрибута s# имеют одно и то же значение атрибута city.

{ Si } -» { city }

На самом деле это отношение удовлетворяет требованиям сразу нескольких функцио­нальных зависимостей.

{ Si, Pi } -» { qty }

{ Si, Pi } -4 { city }

{ Si, Pi } -» { city, qty }

{ Si, Pi } -» { Si }

{ Si, Pi } -> { si, Pi, city, qty }

{ Si } -> { qty } { qty } —> { Si }

Упражнение. Проверьте правильность этого утверждения.

Левая и правая части символической записи функциональной зависимости ино­гда называются детерминантом и зависимой частью соответственно. Как гово­рится в определении, детерминант и зависимая часть являются множествами ат­рибутов. Когда множество содержит только один атрибут, оно называется одно­элементным множеством, скобки опускаются и символическая запись принимает следующий вид.

Si -> city

Как уже было замечено, эти функциональные зависимости относятся к п. а, т.е. к от­дельным значениям переменных-отношений. Однако при рассмотрении самих перемен­ных-отношений, в частности базовых переменных-отношений, интерес представляют не столько функциональные зависимости в их существующих на некоторый момент кон­кретных значениях, сколько функциональные зависимости, выполняющиеся для всех возможных значений данной переменной-отношения. Например, в случае переменной-отношения scp функциональная зависимость

Si -» city

выполняется для всех возможных значений переменной-отношения scp, поскольку в лю­бой момент одному поставщику соответствует в точности один город. По этой причине любые два кортежа переменной-отношения scp в один и тот же момент и с одним и тем же номером поставщика должны соответствовать одному и тому же городу. Практически утверждение, что данная функциональная зависимость выполняется "всегда" (т.е. для всех возможных значений scp), является ограничением целостности для переменной-отношения scp, поскольку при этом накладываются определенные ограничения на все ее допустимые значения. Вот формулировка этого ограничения, которая выполнена с ис­пользованием синтаксиса, введенного в главе 10.

constraint Si_city_fd

count ( scp { Si } ) = count { scp { Si, city } ) ;

Выражение s# —» city может расцениваться как сокращенный способ представления этой более длинной формулировки.

Ниже приведено определение концепции функциональной зависимости для п. б (расширения определения, данного для п. а, отмечены полужирным шрифтом).

■ Пусть R является переменной-отношением, а X и y — произвольными подмноже­ствами множества атрибутов переменной-отношения r. Тогда y функционально зависимо от X, что в символическом виде записывается как

X —> y

(и читается либо как "X функционально определяет y", либо как "X стрелка y") то­гда и только тогда, когда для любого допустимого значения переменной-отношения r каждое значение множества X отношения r связано в точности с од­ним значением множества y отношения r. Иначе говоря, для любого допустимо­го значения переменной-отношения r, если два кортежа переменной-отношения r совпадают по значению X, они также совпадают и по значению y.

Следовательно, далее термин "функциональная зависимость" будет использо­ваться в последнем безотносительном ко времени смысле (за исключением особо оговоренных случаев).

Ниже перечислено несколько безотносительных ко времени функциональных зави­симостей, выполняющихся для переменной-отношения scp.

{ St, Pi } -> qty

{ si, Pi } -» city

{ Si, Pi } -» { city, qty }

{ si, Pi } si

{ si, Pi } -> { Si, Pi, cm, qty }

{ Si } -4 city

Обратите внимание, в частности, на функциональные зависимости, которые выпол­няются для отношения, представленного на рис. 10.1, но не выполняются "всегда" для переменной-отношения scp.

Si -> qty qty -» Si

Иначе говоря, такое утверждение, как "число деталей для каждой поставки дан­ного поставщика одинаково", истинно для конкретных значений, присутствующих в отношении на рис. 10.1, но ложно для всех возможных допустимых значений пере­менной-отношения scp.

Следует отметить, что если X является потенциальным ключом переменной-отношения r, то все атрибуты y переменной-отношения r должны обязательно быть функционально зависимы от X (этот факт упоминается в разделе 8.8 и непосредственно следует из определения потенциального ключа). Аналогично в переменной-отношении деталей р необходимо, чтобы всегда выполнялась следующая зависимость.

р# -»{ р#, pname, color, weight, city }

Действительно, если переменная-отношение R удовлетворяет функциональной зависимости А —» В и А не является потенциальным ключом1, то R будет характери­зоваться некоторой избыточностью. Например, если обратиться к переменной-отношению SCP, наличие в ней функциональной зависимости St —» CITY приведет к тому, что сведения о месте расположения поставщика в определенном городе по­вторятся много раз (это хорошо видно на рис. 10.1). Подробнее данный вопрос об­суждается в следующей главе.

Теперь, даже если ограничиться рассмотрением функциональных зависимостей, ко­торые имеют место в любой момент, полный набор функциональных зависимостей, вы­полняющихся для всех допустимых значений заданной переменной-отношения, может быть все еще очень большим, что можно видеть на примере переменной-отношения SCP. (Упражнение. Попробуйте записать полное множество функциональных зависимостей, существующих в переменной-отношении SCP.) Большая часть оставшегося в этой главе материала посвящена поискам методов сокращения обширного множества функцио­нальных зависимостей до некоторых допустимых размеров.

Почему эта цель столь важна? Как уже отмечалось, одна из причин состоит в том, что функциональные зависимости являются ограничениями целостности, поэтому при каждом обновлении данных в базе СУБД вынуждена будет проверять соблюдение всех этих ограничений. Следовательно, для каждого заданного множества функциональных зависимостей S желательно найти такое множество Т, которое (в идеальной ситуации) было бы существенно меньше множества S и при этом каждая функциональная зави­симость в множестве S могла бы быть заменена функциональной зависимостью из множества Т. Если бы такое множество Т было найдено, то СУБД достаточно было бы контролировать выполнение функциональных зависимостей из множества Т, что авто­матически подразумевало бы соблюдение всех функциональных зависимостей из мно­жества S. Именно поэтому задача поиска подходящего множества Т представляет большой практический интерес.

Соседние файлы в папке Дейт К. Дж. Введение в системы баз данных [7 издание]