Смекни!
smekni.com

Развитие теории и практики баз данных (стр. 3 из 4)

Указанные аномалии связаны с избыточностью (дублированием) данных в БД.

Определить дублирование данных в БД, а значит и предсказать возможность возникновения аномалий обновления можно на этапе проектирования структуры базы данных.

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

Если даны два атрибута X и Y некоторого отношения, то говорят, что Y функционально зависит от X, если в любой момент времени каждому значению X соответствует ровно одно значение Y. Функциональная зависимость обозначается X◊Y.

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

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

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

Рассмотрим предметную область - распределение учебной нагрузки по

преподавателям одной кафедры. Предположим, что у каждой группы каждый

предмет ведет только один преподаватель. Помимо личных данных преподавателя необходимо хранить данные по группе (Наименование, Староста) и для пары (Преподаватель, Группа) необходимо хранить список предметов, которые данный преподаватель преподает в данной группе.

В качестве исходной таблицы возьмем:

А В С
Личные данные преподавателя: ФИО, Должность, Оклад Данные группы: Наименование, Староста Предметы

В качестве первичного ключа таблицы возьмем столбцы "Личные данные Преподавателя" и "Данные группы", поскольку существует только одна ФЗ: AB◊C.

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

Выполним преобразование для таблицы примера:

1. Столбец личных данных преобразуем в четыре столбца:

"Преподаватель" (ФИО), "Табельный №", "Должность", "Оклад". Теперь ключ - "Табельный №" и "Данные группы".

2. Столбец "Данные группы" преобразуем в два столбца: "Группа" (Наименование), "Староста". Теперь ключ - "Табельный №" и "Группа".

3. Столбец "Предметы" преобразуем в столбец "Предмет". Как альтернатива, можно создать новую таблицу "Предметы", которая будет содержать первичный ключ исходного отношения ("Табельный №", "Группа") и столбец "Предмет".

В результате получено отношение А В С D E F

Преподаватель Должность Оклад Группа Староста Предмет

Выявленные функциональные зависимости:

А◊В, С; В◊С; D◊Е; DF◊А.

Первичный ключ: DF, так как от DF зависят остальные атрибуты.

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

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

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

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

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

Пример:

Отношение

А В С D E F

Преподаватель Должность Оклад Группа Староста Предмет

находится в 1НФ.

При этом отношение допускает следующие аномалии обновления:

а) аномалия вставки - при изменении старосты группы необходимо будет изменить соответствующее значение во всех строках с таким же значением группы;

б) аномалия удаления - при удалении информации о предмете, читаемом преподавателем в некоторой группе, может потеряться и другая информация - о старосте группы;

в) аномалия модификации - при изменении старосты в группе следует обновить все записи с таким же значением "Группы".

Преобразуем отношение из примера из 1НФ во 2НФ:

В зависимости D◊E атрибут E функционально зависит от части ключа DF.

Таким образом формируем:

а) новое отношение без частичной зависимости:

ПК: DF, ФЗ: А◊B,C; B◊C; DF◊A.

б) новое отношение для бывшей частичной зависимости

D E

Руководство Группы (Группа, Староста)

ПК: D, ФЗ: D◊E.

Теперь в обоих отношениях отсутствуют частичные зависимости от ключа.

Благодаря данной декомпозиции мы предотвратили аномалии обновления, возникающие из-за дублирования значений "Староста" в исходной таблице.

Важным моментом является возможность восстановления исходной схемы естественным соединением полученных отношений (по атрибуту "Группа")

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

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

Пример:

Отношение

A B C D F

(Преподаватель, Должность, Оклад, Группа, Предмет)

ПК: DF, ФЗ: DF◊А◊B◊C.

находится во второй нормальной форме.

При этом оно допускает следующие аномалии обновления:

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

для всех строк с данным преподавателем и изменение значение оклада в соответствии с новой должностью;

б) аномалия удаления - заключается в потере информации об окладе преподавателя в некоторой должности при удалении единственного преподавателя, занимающего данную должность;

в) аномалия добавления - заключается в необходимости назначения хотя бы одного сотрудника на новую должность добавлении в БД оклада по должности.

Преобразуем данное отношение из примера из 2НФ в 3НФ:

A B C D F

(Преподаватель, Должность, Оклад, Группа, Предмет)

ПК: DF, ФЗ: DF◊А◊В◊C.

I. Cпроецируем отношение на атрибуты A, B, C

A B C

(Преподаватель, Должность, Оклад)

ПК: A, ФЗ: А◊B◊C.

II. Заметим, что полученное отношение вновь содержит транзитивную зависимость, снова декомпозируем его на два отношения:

B C

Зарплата (Должность, Оклад)

ПК: B, ФЗ: B◊C.

A B

Обязанность (Преподаватель, Должность,)

ПК: A, ФЗ: A◊B.

б) спроецируем отношение на атрибуты, кроме B, C

A D F

План (Преподаватель, Группа, Предмет)

ПК: DF, ФЗ: DF◊A.

К исходной схеме без потери кортежей и функциональных зависимостей можно вернуться естественным соединением отношений "Зарплата" и "Обязанность", затем - естественным соединением полученного отношения и отношения "План".

5. Языки запросов SQL и QBE

Хранимые в базе данные можно обрабатывать вручную, последовательно просматривая и редактируя данные в таблицах с помощью имеющихся в СУБД средств. Для повышения эффективности обработки данных применяют запросы, позволяющие производить множественную обработку данных, т, е. одновременно вводить, редактировать и удалять множество записей, а также выбирать данные из таблиц.

Запрос представляет собой специальным образом описанное требование, определяющее состав производимых над БД операций по выборке, удалению или модификации хранимых данных.

Для подготовки запросов с помощью различных СУБД чаще всего используются два основных языка описания запросов:

QBE (Query By Example) - язык запросов по образцу;

SQL (Structured Query Language) - структурированный язык запросов.

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

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

Стандарт SQL определяется ANSI (American National Standard Institute - Американским Национальным Институтом Стандартов.

Имеются два SQL: Интерактивный (Interactive) и Встроенный (Embedded). Большей частью, обе формы работают одинаково, но используются различно.