- •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.4. Третья нормальная форма
Реляционная таблица удовлетворяет третьей нормальной форме 3НФ,если она находится в 2НФ и в ней нет транзитивных зависимостей.Транзитивная зависимость возникает, если неключевой атрибут функционально зависит от одного или более неключевых атрибутов.
В данном примере мы привели таблицу 3.6, содержащую цепочку транзитивных зависимостей, к паре таблиц 3.7 и 3.8, находящихся в 3НФ. Для таблицы 3.6. действительны следующие ограничения предметной области:
каждый работник имеет только одного менеджера;
один менджер может руководить несколькими рабочими.
Таблица 3.6
№ работника |
Фамилия работника |
№ менеджера |
Фамилия менеджера |
1235 |
Иванов |
1311 |
Сергеев |
1412 |
Петров |
1311 |
Сергеев |
1311 |
Сидоров |
1312 |
Попов |
Таблица 3.7
№ работника |
Фамилия |
№ менеджера |
1235 |
Иванов |
1311 |
1412 |
Петров |
1311 |
1311 |
Сидоров |
1312 |
Таблица 3.8
-
№ менеджера
Фамилия
менеджера
1311
Сергеев
1312
Попов
3.5. Нормальная форма Бойса-Кодда (нфбк)
Реляционная таблица находится в нормальной форме Бойса-Кодда (НФБК),если для любой ФЗ: XY, X ( то есть детерминанта) является возможным ключом отношения. Из определения следует, что любая таблица, удовлетворяющая НФБК, также удовлетворяет и 2НФ, однако обратное неверно.
Рассмотрим таблицу 3.9 «Оплата за работу». № Работникаявляется ключом, следовательно, в таблице имеются функциональные зависимости:
ФЗ: № Работника Разряд;
ФЗ: № РаботникаОплата.
Однако также имеется функциональная зависимость
ФЗ: Разряд Оплата.
Атрибут «разряд» является детерминантой, так как он однозначно определяет атрибут «оплата», но «разряд» не может быть ключом отношения, поэтому в таком виде отношение «Оплата за работу» не удовлетворяет НБКФ. Но таблица 3.9 удовлетворяет 2НФ (так как неключевые атрибуты «разряд» и «оплата»). Таким образом, таблица может быть в 2НФ, но не в НФБК.
Таблица 3.9. «Работник»
№ работника |
Разряд |
Премиальные |
1235 |
1 |
150 |
1412 |
2 |
120 |
1311 |
1 |
150 |
Чем плохи таблицы, не удовлетворяющие НФБК? Вызванные ими проблемы схожи с перечисленными для таблиц, нарушающих 2НФ:
1. Размер премиальных для типа специальности повторяется в каждой строке, относящейся к работнику этой специальности. Это избыточные данные, занимающие лишнее место.
2. Если размер премиальных для типа специальности изменяется, то требуется обновить каждую строку. Если строка удаляется, то мы можем потерять информацию о размере премиальных для данной специальности. Таким образом, таблица подвержена аномалиям обновления и удаления.
3. Если в какой-то момент времени отсутствуют работники данной специальности, то может не оказаться строки, в которой можно хранить размер премиальных. Это аномалия ввода.
Для того чтобы решить эти проблемы, таблицу необходимо разбить на несколько таблиц для устранения аномалий и поддержания целостности данных.
Создадим новую таблицу 3.10 «Работник 1», удалив из таблицы 3.9 все атрибуты, стоящие в правой части ФЗ, нарушающие критерий НФБК. В нашем примере это Премиальные. Создадим новую таблицу 3.11 «Работник 2», состоящую из атрибутов, как из левой, так и из правой части ФЗ, нарушающей критерий НФБК. В нашем примере этоСпециальностьиПремиальные. Детерминант ФЗСпециальностьбудет ключом.
Таблица 3.10. «Работник 1»
№ работника |
Специальность |
1235 |
Электрик |
1412 |
Штукатур |
1311 |
Электрик |
Таблица 3.11. «Работник 2»
Специальность |
Премиальные |
Электрик |
150 |
Штукатур |
120 |
Электрик |
150 |
Мы разбили таблицу 3.9 «Работник» на таблицы 3.10 и 3.11, каждая из которых удовлетворяет НФБК.