Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Управление данными (пособие).pdf
Скачиваний:
283
Добавлен:
21.05.2015
Размер:
5.42 Mб
Скачать

116

10.3.Декомпозиция без потерь и функциональные зависимости

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

Рассмотрим пример. Пусть исходное отношение имеет вид представленный на рис.10.4:

Отношение 1

КОД_СТУДЕНТА

ИМЯ_СТУДЕНТА

ФАКУЛЬТЕТ

С2

Иванов

Физический

С5

Петров

Химический

С7

Иванов

Исторический

Рис. 10.4. Пример отношения

На рис.10.5 показано, что это отношение может быть разбито на два отношения тремя различными способами.

а)

Отношение 1а

 

 

Отношение 2а

 

 

КОД_СТУДЕНТА

ИМЯ_СТУДЕНТА

 

КОД_СТУДЕНТА

ФАКУЛЬТЕТ

 

С2

Иванов

 

С2

Физический

 

С5

Петров

 

С5

Химический

б)

С7

Иванов

 

С7

Исторический

Отношение 1б

 

 

Отношение 2б

 

 

КОД_СТУДЕНТА

ИМЯ_СТУДЕНТА

 

ИМЯ_СТУДЕНТА

ФАКУЛЬТЕТ

 

С2

Иванов

 

Иванов

Физический

 

С5

Петров

 

Петров

Химический

в)

С7

Иванов

 

Иванов

Исторический

Отношение 1в

 

 

Отношение 2в

 

 

КОД_СТУДЕНТА

ФАКУЛЬТЕТ

 

ИМЯ_СТУДЕНТА

ФАКУЛЬТЕТ

 

С2

Физический

 

Иванов

Физический

 

С5

Химический

 

Петров

Химический

 

С7

Исторический

 

Иванов

Исторический

Рис. 10.5. Варианты декомпозиции отношения 1

117

Если внимательно посмотреть на приведенные три варианта декомпозиции отношений, то можно заметить что в первом случае (вариант а) при разбиении отношений исходная информация не утрачивается. Действительно, исходное отношение Отношение 1 может быть восстановлено в прежнем виде путем операции естественного соединения отношений Отношение 1а и Отношение 2а по атрибуту КОД_СТУДЕНТА.

Во втором же и третьем случаях часть информации содержащейся в отношении Отношение 1 оказывается утраченной, а именно, в них потеряна информация какой из студентов-однофамильцев Ивановых учится на физическом, а какой на историческом факультетах. Нетрудно увидеть, что естественное соединение отношений Отношение 1б и Отношение 2б по единственному их общему атрибуту ИМЯ_СТУДЕНТА, которое представлено на рис.10.6, не позволяет получить исходное состояние отношения Отношение 1. Действительно, полученное в результате соединения отношение не совпадает с исходным.

Отношение 1б

JOIN Отношение 2б

КОД_СТУДЕНТА

ИМЯ_СТУДЕНТА

ФАКУЛЬТЕТ

С2

Иванов

Физический

С2

Иванов

Исторический

С5

Петров

Химический

С7

Иванов

Физический

С7

Иванов

Исторический

Рис. 10.6. Соединение отношений

Важный вопрос о том, происходит или не происходит потеря информации при декомпозиции отношений, самым тесным образом связан с понятием функциональной зависимости. Можно обратить внимание на то, что в предыдущем примере при проведении декомпозиции, представленной вариантом «б», была утеряна функциональная зависимость атрибута ФАКУЛЬТЕТ от атрибута КОД_СТУДЕНТА, а при декомпозиции варианта «в» утеряна зависимость атрибута ИМЯ_СТУДЕНТА от атрибута КОД_СТУДЕНТА.

Ответ на вопрос, в каком случае декомпозиция отношения является обратимой, дается теоремой Хеза (Heath).

Теорема Хеза. Пусть R{A, B, C} является отношением, а A, B и C являются атрибутами этого отношения. Если в отношении R имеет место функциональная зависимость A→B, то отношение R равно соединению его проекций R1{A, B} и R2{A, C}.

Другими словами функциональная зависимость должна быть сохранена и детерминант этой зависимости (атрибут А) должен присутствовать в обоих

118

результирующих отношениях. В приведенном выше на рис.10.4 примере отношения имеют место две функциональные зависимости

КОД_СТУДЕНТАИМЯ_СТУДЕНТА и КОД_СТУДЕНТАФАКУЛЬТЕТ и

поэтому в соответствии с теоремой Хеза, отношение СТУДЕНТЫ может быть разбито на два, являющиеся его проекциями отношения, а именно

Отношение 1а {КОД_СТУДЕНТА, ИМЯ_СТУДЕНТА} и Отношение 1б {КОД_СТУДЕНТА, ФАКУЛЬТЕТ} без потери информации. При любом другом варианте декомпозиции одна из этих функциональных зависимостей теряется.

10.4. Первая и вторая нормальные формы.

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

Как уже говорилось выше, отношение, находящееся в первой нормальной форме может обладать нежелательными свойствами.

Представим себе, что нам надо хранить в базе данных информацию о личном коде (идентификаторе) студента, его фамилии и о его оценках, полученных по конкретным дисциплинам. Для этих целей можно ввести следующие атрибуты: КОД_СТУДЕНТА, ИМЯ_СТУДЕНТА, ДИСЦИПЛИНА и ОЦЕНКА. Между этими атрибутами имеют место функциональные зависимости, представленные стрелками на рис.10.7.

КОД_СТУДЕНТА ИМЯ_СТУДЕНТА ОЦЕНКА

ДИСЦИПЛИНА

Рис. 10.7. Диаграмма функциональных зависимостей

Эти зависимости показывают, что пара значений атрибутов {КОД_СТУДЕНТА, ДИСЦИПЛИНА} однозначно определяют значение атрибута ОЦЕНКА (конкретный студент может иметь по конкретной дисциплине только одну оценку), а значение атрибута КОД_СТУДЕНТА однозначно определяет значения атрибута ИМЯ_СТУДЕНТА (студент имеет одну фамилию).

Можно отметить также, что в отношении присутствует еще и приводимая функциональная зависимость атрибута от ключа отношения, а именно,

119

зависимость {КОД_СТУДЕНТА, ДИСЦИПЛИНА}→{ИМЯ_СТУДЕНТА},

обозначенная на рис.10.7 пунктиром.

Какова должна быть структура отношений для хранения данных, соответствующих этому примеру? Рассмотрим простейший случай, когда все приведенные атрибуты включены в схему одного отношения, назовем его ЭКЗАМЕН, как это показано на рис.10.8.

ЭКЗАМЕН

КОД_СТУДЕНТА

ИМЯ_СТУДЕНТА

ДИСЦИПЛИНА

ОЦЕНКА

С6

Петров

Физика

3

С6

Петров

Математика

4

С6

Петров

Информатика

3

С2

Иванова

Физика

5

С2

Иванова

Математика

4

С2

Иванова

История

4

С2

Иванова

Информатика

5

С2

Иванова

Иностр.язык

5

С9

Попов

Иностр.язык

4

С1

Кузнецов

История

5

С1

Кузнецов

Иностр.язык

4

С8

Орлов

Археология

5

Рис. 10.8. Пример отношения в 1НФ

Это отношение находится в первой нормальной форме, так как все значения его атрибутов являются скалярными. Единственным потенциальным ключом этого отношения является составной атрибут {КОД_СТУДЕНТА, ДИСЦИПЛИНА}, так как эта пара атрибутов однозначно определяет значения кортежей отношения, в то время как каждый из атрибутов КОД_СТУДЕНТА и ДИСЦИПЛИНА по отдельности таким свойством не обладают.

Хорошо видно, однако, что содержащиеся в этом отношении данные обладают избыточностью. Так, в частности, в этом отношении для каждого студента многократно дублируется информация о его фамилии.

Избыточность в отношении приводит к возникновению нежелательных факторов, или как еще говорят к аномалиям, при осуществлении с этим отношением операций, связанных с изменением данных, а именно, операций INSERT (вставка кортежа), DELETE (удаление кортежа) и UPDATE (обновление значений атрибута какого-либо кортежа). Рассмотрим, в чем состоят эти аномалии.

Операция INSERT. В отношение ЭКЗАМЕН нельзя вставить кортеж с данными о коде студента и его фамилии (например, запись о том, что студент с кодом С4 имеет фамилию Лукин), если мы не имеем данных о том, что этот студент сдавал хотя бы одну дисциплину. Действительно, в этом случае не

120

может быть задано значение первичного ключа для кортежа, соответствующего этой записи, так как неизвестно значение атрибута ДИСЦИПЛИНА.

Операция DELETE. При удалении информации о том, что конкретный студент сдавал какую-либо дисциплину, например, если мы хотим аннулировать ошибочно введенную запись о сдаче студентом с кодом С9 экзамена по иностранному языку, мы можем потерять информацию о фамилии этого студента, из-за того, что удаляемый кортеж был единственным кортежем, содержащем информацию о нем.

Операция UPDATE. Значение атрибута ИМЯ_СТУДЕНТА повторяется в этом отношении многократно для каждого конкретного значения атрибута КОД_СТУДЕНТА. Поэтому в случае, когда, например, для студентки с кодом С2 потребуется изменить фамилию (вышла замуж), эти изменения необходимо будет произвести для всех кортежей отношения, относящихся к этой студентке. Помимо громоздкости выполнения одинаковой операции корректировки значения атрибута для большого числа записей, в этом случае возможна более неприятная ситуация. Если по тем или иным причинам (например, из-за сбоя системы), для каких-либо кортежей отношения такая коррекция не будет произведена, в отношении окажутся кортежи с противоречивыми данными (в одних кортежах коду С2 будет соответствовать одна фамилия, а в других для того же кода будет указана другая фамилия.

Указанные аномалии, однако, могут быть устранены, если заменить исходное отношение двумя его проекциями – отношениями СТУДЕНТ и УСПЕВАЕМОСТЬ, представленными на рис.10.9.

СТУДЕНТ

КОД_СТУДЕНТА

ИМЯ_СТУДЕНТА

С6

Петров

С2

Иванова

С9

Попов

С1

Кузнецов

С7

Орлов

УСПЕВАЕМОСТЬ

КОД_СТУД ДИСЦИПЛИНА ОЦЕНКА

С2

Физика

5

С2

Математика

4

С2

История

4

С2

Информатика

5

С2

Иностр.язык

5

С6

Физика

3

С6

Математика

4

С6

Информатика

3

С9

Иностр.язык

4

С1

История

5

С1

Иностр.язык

4

С7

Археология

5

Рис. 10.9. Пример декомпозиции отношения ЭКЗАМЕН на два отношения СТУДЕНТ и УСПЕВАЕМОСТЬ

Диаграммы функциональных зависимостей для этих двух отношений представлены на рис.10.10.

121

 

 

 

 

 

 

 

 

 

 

 

 

 

 

КОД_СТУДЕНТА

 

 

 

КОД_СТУДЕНТА

 

ИМЯ_СТУДЕНТА

ОЦЕНКА

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ДИСЦИПЛИНА

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 10.10. Диаграммы функциональных зависимостей отношений

СТУДЕНТ и УСПЕВАЕМОСТЬ

Можно видеть, что рассмотренные выше проблемы, имеющие место в отношении ЭКЗАМЕН, связанные с обновлением данных, в данном случае оказываются преодоленными.

Операция INSERT. Информация о том, что студент с кодом С4 имеет фамилию Лукин, осуществляется вставкой соответствующего кортежа в отношение СТУДЕНТ независимо от того имеются или нет данные о сдаче этим студентом какой-либо учебной дисциплины.

Операция DELETE. Информация о том, что студент с кодом С9 сдавал экзамен по иностранному языку может быть удалена из отношения УСПЕВАЕМОСТЬ без потери информации о фамилии этого студента.

Операция UPDATE. Для изменения фамилии у студентки с кодом С2 необходимо скорректировать значение соответствующего атрибута в единственной записи отношения СТУДЕНТЫ.

Сравнивая диаграммы функциональных зависимостей на рис.10.7 и 10.10, можно увидеть, что произведенная декомпозиция отношения ЭКЗАМЕН на два отношения СТУДЕНТЫ и УСПЕВАЕМОСТЬ привела к исключению из отношений приводимой функциональной зависимости атрибута от ключа отношения, а

именно, зависимости {КОД_СТУДЕНТА, ДИСЦИПЛИНА}→{ИМЯ_СТУДЕНТА},

обозначенной на рис.10.7 пунктиром.

Указанная зависимость является избыточной, так как, на самом деле она является следствием наличия неприводимой функциональной зависимости {КОД_СТУДЕНТА}→{ИМЯ_СТУДЕНТА}, что хорошо видно из диаграммы на рис.10.7.

Теперь можно дать определение второй нормальной формы отношения.

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

Напомним, что неключевым мы называем атрибут, который не входит в состав ключа отношения.

Оба отношения – СТУДЕНТЫ и УСПЕВАЕМОСТЬ, полученные в результате декомпозиции отношения ЭКЗАМЕН, находятся во второй нормальной форме,