- •Установочный модуль
- •Введение
- •Модуль 1
- •Реляционная алгебра
- •Отсутствующие данные
- •Пустые значения
- •Неопределенные значения
- •Интерпретации
- •Правила вычисления выражений
- •Следствия
- •Проверка условий
- •Реляционные объекты данных
- •Формальные определения
- •Домены и атрибуты
- •Схема отношения
- •Именованное значение атрибута
- •Кортеж
- •Отношение
- •Схема базы данных
- •База данных
- •Операции реляционной алгебры
- •Унарные операции
- •Бинарные операции
- •Варианты операции соединения
- •Производные операции
- •Пример построения выражения реляционной алгебры
- •Понятие базовых и виртуальных отношений
- •Понятие полноты реляционной алгебры
- •Формирование запросов на языке SQL
- •Металингвистические символы
- •Реализация операций реляционной алгебры
- •Пример использования подзапросов
- •Группирующие запросы
- •Упорядочение результатов
- •Вопросы для самоконтроля
- •Упражнения
- •Построение выражений реляционной алгебры
- •Модуль 2
- •Базовые и виртуальные отношения
- •Типы данных
- •Базовые типы данных
- •Типы данных, определяемые пользователем
- •Первичные и кандидатные ключи
- •Создание базовых отношений
- •Индексы
- •Модификация базовых отношений
- •Вставка строк
- •Обновление строк
- •Удаление строк
- •Целостность
- •Декларативная поддержка
- •Пример декларативной поддержки целостности
- •Транзакции и блокировки
- •Триггеры
- •Виртуальные отношения
- •Вопросы для самоконтроля
- •Упражнения
- •Декларативная поддержка целостности
- •Модуль 3
- •Нормальные формы
- •Функциональные зависимости (ФЗ)
- •Правила вывода Армстронга
- •Производные правила вывода
- •Независимость правил Армстронга
- •Полнота системы правил Армстронга
- •Нормальные формы
- •Первая нормальная форма (1NF)
- •Вторая нормальная форма (2NF)
- •Третья нормальная форма (3NF)
- •Нормальная форма Бойса-Кодда (Boyce, Codd; NFBC)
- •Пример построения нормализованных схем отношений
- •Вопросы для самоконтроля
- •Модуль 4
- •Проектирование схем баз данных
- •Уровни логической модели
- •Миграция ключей и виды связей
- •Классификация кластеров
- •Иерархическая рекурсия
- •Абстрактная схема
- •Обобщения
- •Пример реализации иерархической рекурсии
- •Сетевая рекурсия
- •Абстрактная схема
- •Сетевая реализация иерархической рекурсии
- •Обобщения
- •Пример реализации сетевой рекурсии
- •Ассоциация
- •Детализация связей многие-ко-многим
- •Обобщения
- •Пример реализации ассоциации
- •Обобщение
- •Абстрактная схема
- •Пример реализации обобщения
- •Композиция
- •Абстрактная схема
- •Пример реализации композиции
- •Агрегация
- •Абстрактная схема
- •Пример реализации агрегации
- •Унификация атрибутов
- •Вопросы для самоконтроля
- •Упражнения
- •Иерархическая рекурсия
- •Сетевая рекурсия
- •Ассоциация
- •Обобщение
- •Композиция
- •Агрегация
- •Дополнительные главы
- •Технологии баз данных
- •Информационные системы
- •Жизненный цикл ИС
- •СУБД и БД
- •Жизненный цикл БД и средства проектирования
- •Модели данных
- •Иерархическая модель данных
- •Сетевая модель данных
- •Реляционная модель данных
- •Постреляционная модель данных
- •Объектно-ориентированные модели данных
- •XML как модель данных
- •Многомерная модель данных (OLAP)
- •Основные функции СУБД
- •Управление данными во внешней памяти
- •Управление буферами оперативной памяти
- •Управление транзакциями
- •Журнализация и восстановление БД после сбоев
- •Поддержка языков баз данных
- •Типовая организация СУБД
- •Модели взаимодействия с БД
- •Модель с централизованной архитектурой
- •Модель с автономными персональными компьютерами
- •Архитектура «файл-сервер»
- •Архитектура «клиент-сервер»
- •Архитектура «клиент-сервер» трехзвенная
- •Распределенные базы данных
- •Технология тиражирования данных
- •Понятие «фрактал»
- •Геометрические фракталы
- •Алгебраические фракталы
- •Стохастические фракталы
- •Системы итерируемых функций
- •Вопросы для самоконтроля
- •Литература
- •Список иллюстраций
- •Список таблиц
foreign key(атрибуты) references {не ключ} ! {ключевые атрибуты}
4.2.4. Нормальная форма Бойса-Кодда (Boyce, Codd; NFBC)
Усиленной третьей нормальной формой является форма Бойса-Кодда. В ней требование о навязывании функциональных зависимостей объявлениями (первичного и кандидатных) ключей распространяется и на ключевые атрибуты. Таким образом, в форме Бойса-Кодда ненавязанных ограничений функциональных зависимостей нет:
ОтношениеNFBC(ключевые атрибуты, неключевые атрибуты) primary key(ключ)
candidate key(ключ)
foreign key(атрибуты) references
Примечание. Здесь нет ненавязанных ограничений функциональных зависимостей. Но на отношение могут быть наложены и другие ограничения, не связанные с понятием функциональных зависимостей
Всегда ли можно отношение, находящееся в третьей нормальной форме с ненавязанными ограничениями {не ключ} ! {ключевые атрибуты}, привести к форме Бойса-Кодда?
Рассмотрим пример отношения R с атрибутами X, Y, Z, находящего в третьей нормальной форме, но не находящегося в форме Бойса-Кодда:
Вариант 1 схемы БД
R(X, Y, Z) primary key(X, Y) {Z} ! {Y}
Если, как обычно, провести декомпозицию так, чтобы ненавязанная функциональная зависимость {Z} ! {Y} была навязана объявлением ключа Z в выделяемом отношении R1(Z, Y), то получим
R1(Z, Y) primary key(Z)
R2(X, Z)
foreign key(Z) references R1(Z)
Но что объявить ключом в отношении R2? Построим табличный пример для исходного отношения R (табл. 4.3). Пример показывает, что в отношении R2(X, Z) R[X, Z] ни X, ни Z не могут быть ключами. Следовательно, ключом будет их пара.
Вариант 2 схемы БД
R1(Z, Y) primary key(Z)
R2(X, Z)
primary key(X, Z)
foreign key(Z) references R1(Z)
Таблица 4.3.: Пример допустимого состояния отношения R
R |
|
|
X |
Y |
Z |
0 |
0 |
10 |
0 |
1 |
20 |
1 |
0 |
10 |
1 |
1 |
20 |
|
|
|
R1(Z, Y) ./ R2(X, Z)
{X, Y} ! {Z}
Декомпозиция исходного отношения R связана с разрушением его первичного ключа, который навязывал функциональную зависимость {X, Y} ! {Z}. Поэтому в варианте 2 ее следует добавить в качестве ограничения. Но это ограничение выражено в терминах атрибутов обоих отношений, что означает невозможность их независимой модификации. Данный пример ограничения является примером ограничения функциональной зависимости на уровне базы данных, так как здесь ограничение накладывается на два (но в общем случае может накладываться и на более чем два) отношения базы данных. Все ранее рассмотренные примеры функциональных зависимостей относились к одному отношению, то есть формулировались на уровне отношения.
Как в варианте 1, так и в варианте 2 для контроля ограничения функциональной зависимости необходимо прибегать к использованию триггеров. Но в варианте 1 (отношение находится в 3NF)
триггер будет оперировать кортежами одного отношения, тогда как в варианте 2 (отношения находятся в NFBC, но они не являются независимыми) – двумя. Первый вариант проще.
Таким образом, на практике обычно ограничиваются приведением отношений к третьей нормальной форме (что всегда возможно). В большинстве случаев при этом оказывается, что отношения находятся и в форме Бойса-Кодда. Контроль над ограничениями, не связанными с понятием функциональных зависимостей, реализуют с помощью триггеров.
Примечание. Ситуации, когда отношение находится в 3NF, но не находится в NFBC, крайне редки на практике. Поэтому часто говорят о третьей нормальной форме даже в случае, когда имеет место форма Бойса-Кодда. Но если отношение находится в 3NF, но не в NFBC, то это имеет смысл подчеркивать
Из определений нормальных форм следует их вложенность, иллюстрируемая диаграммой (табл. 4.4). По отношению к третьей нормальной форме вторая форма является ослабленной, а форма БойсаКодда – усиленной.
Таблица 4.4.: Диаграмма вложенности нормальных форм
1NF
2NF
3NF
NFBC
Отметим важность того, что понятия нормальных форм вводятся по отношению к заданному мно-