- •Информация и данные
- •Основные понятия систем с базами данных
- •Пользователи информационной системы с БД
- •Требования к информационным системам с базами данных
- •Основные компоненты ИС с базами данных
- •Архитектура систем с базами данных. Понятие модели данных
- •Сущности и их свойства
- •Связи (отношения) между сущностями
- •Виды связей между сущностями
- •Еще о сущностях, их свойствах и связях между ними
- •Модели данных. Ранние подходы к организации баз данных
- •Основные понятия реляционной модели данных
- •Структуры данных реляционной модели. Реляционные отношения
- •Свойства отношений
- •Отсутствие в отношении одинаковых кортежей
- •Кортежи отношения не упорядочены (сверху вниз)
- •Атрибуты отношения не упорядочены (слева направо)
- •Значения всех атрибутов являются атомарными
- •Виды отношений
- •Реляционная база данных
- •Реляционная модель. Операции над данными
- •Реляционная алгебра
- •Пересечение отношений
- •Вычитание отношений
- •Декартово произведение отношений
- •Проекция
- •Выборка (ограничение)
- •Естественное соединение отношений
- •Деление
- •Реляционное исчисление
- •Примеры правильно построенных формул
- •Язык SQL
- •Отличие SQL от процедурных языков программирования
- •Формы и составные части SQL
- •Условия и терминология
- •Простейшие SELECT-запросы
- •Ограничения целостности в реляционной модели
- •Ограничения целостности уровня атрибута
- •Домены отношений
- •Отсутствующая информация или NULL-значения.
- •Ограничения целостности уровня кортежа
- •Ограничения целостности уровня отношения
- •Потенциальные, первичные, альтернативные ключи отношения
- •Потенциальные ключи и NULL-значения
- •Ограничения целостности уровня базы данных
- •Внешние ключи и NULL-значения
- •Правила ссылочной целостности
- •При обновлении кортежа в родительском отношении
- •При удалении кортежа в родительском отношении
- •При вставке кортежа в дочернее отношение
- •При обновлении кортежа в дочернем отношении
- •Средства обеспечения целостности данных в СУБД
- •Поддержка декларативных ограничений целостности в языке SQL
- •Проектирование базы данных
- •Функциональная зависимость
- •Нормализация отношений базы данных
- •Нормальные формы
- •Декомпозиция без потерь и функциональные зависимости
- •Первая и вторая нормальные формы.
- •Третья нормальная форма.
- •Многозначные зависимости и четвертая нормальная форма
- •Зависимости соединения и пятая нормальная форма
- •Итоговая схема процедуры нормализации
- •Структуры хранения данных и методы доступа
- •Хранение отношений и доступ к хранимым данным
- •Индексирование
- •Управление транзакциями и целостность баз данных
- •Транзакции и параллелизм
- •Проблемы, возникающие при параллельном выполнении транзакций
- •Проблема потери результатов обновления
- •Проблемы несовместимого анализа
- •Несовместимый анализ – неповторяемое считывание
- •Несовместимый анализ – фиктивные элементы (фантомы)
- •Собственно несовместимый анализ
- •Конфликты между транзакциями
- •Методы сериализации транзакций
- •Решение проблем параллелизма при помощи блокировок
- •Проблема потери результатов обновления
- •Проблема несовместимого анализа. Неповторяемое считывание
- •Фиктивные элементы (фантомы)
- •Собственно несовместимый анализ
- •Уровни изоляции. Объекты синхронизационных блокировок
- •Предикатные синхронизационные блокировки
- •Метод временных меток
- •Уровни изоляции.
- •Синтаксис операторов SQL, определяющих уровни изоляции
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НФ) тогда и только тогда, когда оно находиться в первой нормальной форме и каждый неключевой атрибут неприводимо (функционально полно) зависит от первичного ключа.
Напомним, что неключевым мы называем атрибут, который не входит в состав ключа отношения.
Оба отношения – СТУДЕНТЫ и УСПЕВАЕМОСТЬ, полученные в результате декомпозиции отношения ЭКЗАМЕН, находятся во второй нормальной форме,