- •2. Реляционная модель данных
- •2.1. Определения и понятия
- •2.2. Первичные ключи и индексы
- •2.3. Реляционные отношения между таблицами
- •2.3.1. Отношение один-ко-многим
- •2.3.2. Отношение один-к-одному
- •2.3.3. Отношение многие-ко-многим
- •2.3.4. Связи между записями одной таблицы
- •2.4. Ссылочная целостность
- •2.5. Индексы
- •Упражнения и задачи
- •3. Нормализация отношений
- •3.1. Первая нормальная форма
- •3.2. Функциональные зависимости и детерминанты
- •3.3. Вторая нормальная форма
- •3.4. Третья нормальная форма
- •3.5. Нормальная форма Бойса-Кодда (нфбк)
- •3.6. Нормализация за и против
- •Контрольные вопросы
- •Упражнения и задачи
- •4. Операции с данными в реляционной модели
- •4.1. Объединение
- •4.2. Пересечение
- •4.3. Вычитание
- •4.4. Декартово произведение
- •4.5. Выбор
- •4.6. Проекция
- •4.7. Соединение
- •4.8. Деление
- •Упражнения и задачи
- •5. Запросы к бд
- •5.1. Простые запросы
- •5.2. Многотабличные запросы
- •5.3. Подзапросы
- •6. Сетевая модель данных
- •6.1. Исторический контекст
- •6.2. Основные понятия и определения
- •Торговый-агент
- •Строка-элемент
- •6.3. Преимущества и недостатки сетевых моделей
- •Упражнения и задачи
- •7. Иерархическая модель данных
- •7.1. Основные понятия и определения
- •7.2. Преимущества и недостатки иерархических моделей
- •Упражнения и задачи
- •Часть 2. Управление окружением базы данных
- •1. Администрирование баз данных
- •1.1. Функции абд
- •1.1.1. Работа с пользователями
- •1.1.2. Установление стандартов и процедур
- •1.2. Задачи абд
- •2. Защита базы данных
- •2.1. Идентификация пользователя
- •2.2. Проверка полномочий и представления данных
- •2.3. Шифровка
- •Метод поалфавитной подстановки
- •2.4. Секретность данных
- •4. Целостность данных
- •4.1. Контроль типов
- •4.2. Контроль изменений
- •4.3. Целостность на уровне ссылок
- •5. Параллельная работа с бд
- •5.1. Обработка транзакций
- •5.2. Параллельная работа с бд
- •Литература
3.2. Функциональные зависимости и детерминанты
Функциональные зависимости (ФЗ) позволяют накладывать дополнительные ограничения на реляционную схему. Основная идея состоит в том, что значение одного атрибута в кортеже однозначно определяет значение другого атрибута. Например, в каждом кортеже таблицы 3.1 № работникаоднозначно определяетфамилию;№ работникаоднозначно определяетспециальность. Записываются эти две функциональные зависимости следующим образом:
ФЗ : № работника фамилия,
ФЗ : № работника специальность.
Функциональная зависимость – значение атрибута в кортеже однозначно определяет значение другого атрибута в кортеже.
Более формально мы можем определить функциональную зависимость следующим образом: если А и В – атрибуты в таблице R, то запись
ФЗ : AВ
обозначает, что если два кортежа в таблице R имеют одно и то же значение атрибута А, то они имеют одно и то же значение атрибута В. Это определение также применимо, если А и В – множества столбцов, а не просто отдельные столбцы.
Обозначение читается «функционально определяет».
Атрибут в левой части ФЗ называется детерминантом,так как его значение однозначно определяет значение атрибута в правой части. Ключ таблицы всегда является детерминантом, так как его значение однозначно определяет значение каждого атрибута таблицы.
3.3. Вторая нормальная форма
Вторая и третья нормальные формы касаются отношений между ключевыми и неключевыми атрибутами. Реляционная таблица находится во второй нормальной форме (2НФ), если все неключевые атрибуты являются функционально зависимыми от всего ключа. Таким образом, 2НФ может оказаться нарушена только в том случае, когда ключ составной, то есть ключом является набор из нескольких атрибутов.
Рассмотрим реляционную таблицу 3.3. В ней ключ состоит из атрибутов № работникаи№ здания.Фамилияопределяется атрибутом№ работникаи, следовательно, функционально зависит от части ключа. Это означает, что для определения фамилии работника достаточно знать№ работника. Таким образом, таблица не удовлетворяет 2НФ. Если оставить эту таблицу в таком виде, не приведя ее к 2НФ, то могут возникнуть следующие проблемы:
1. Фамилия работника повторяется в каждой строке, относящейся к назначению этого работника.
2. Если фамилия работника изменяется, то требуется обновить все строки, содержащие записи о назначениях этого работника. Это аномалия изменения данных.
3. Из-за такой избыточности может возникнуть несоответствие данных, когда в разных строках содержатся разные имена для одного и того же работника.
4. Если в какой-то момент времени работник не имеет назначений, то может не оказаться строки, в которой можно хранить имя работника. Это аномалия ввода данных.
Таблица 3.3. «Назначение 1»
№ работника |
№ здания |
Дата начала |
Фамилия |
1235 |
312 |
10.10 |
Петров |
1412 |
312 |
01.10 |
Смирнов |
1235 |
515 |
17.10 |
Петров |
1412 |
460 |
08.12 |
Смирнов |
1412 |
435 |
15.10 |
Смирнов |
Для того чтобы решить эти проблемы, таблицу необходимо разбить на две реляционные таблицы, каждая из которых удовлетворяет 2НФ.
Таблица 3.4. «Работник»
№ работника |
Фамилия |
1235 |
Петров |
1412 |
Смирнов |
Таблица 3.5. «Назначение»
-
№ работника
№ здания
Дата начала
1235
312
10.10
1412
312
01.10
1235
515
17.10
1412
460
08.12
1412
435
15.10
Эти две реляционные таблицы находятся во 2НФ и исключают перечисленные выше проблемы. Таким образом, 2НФ сокращает избыточность данных и возможность аномалий.
Процесс разбиения на две 2НФ-таблицы состоит из нескольких простых шагов:
1. Создается новая таблица, атрибутами которой будут атрибуты исходной таблицы, входящие в противоречащую правилу ФЗ. Детерминант ФЗ становится ключом новой таблицы.
2. Атрибут, стоящий в правой части ФЗ, исключается из исходной таблицы.
3. Если более одной ФЗ нарушают 2НФ, то шаги 1 и 2 повторяются для каждой такой ФЗ.
4. Если один и тот же детерминант входит в несколько ФЗ, то все функционально зависящие от него атрибуты помещаются в качестве неключевых атрибутов в таблицу, ключом которой будет детерминант.