- •Введение
- •Глава 1. Основные понятия баз данных
- •1.1. История возникновения баз данных
- •1.2. Модели данных
- •1.2.1. Иерархическая модель данных
- •1.2.2. Сетевая модель базы данных
- •1.2.3. Реляционная модель базы данных
- •1.2.4. Другие модели баз данных (ООСУБД)
- •2.1. История появления и развития SQL
- •Глава 2. SQL
- •2.2. Стандарты SQL
- •2.2.1. Стандарты ANSI/ISO
- •2.2.2. ODBC и консорциум SQL Access Group
- •2.2.3. JDBC и серверы приложений
- •2.3. SQL и переносимость
- •2.4. SQL и сети
- •2.4.1. Централизованная архитектура
- •2.4.2. Архитектура файлового сервера
- •2.4.3. Архитектура “клиент/сервер”
- •2.4.4. Многоуровневая архитектура
- •2.4.5. SQL и мэйнфреймы
- •2.4.7. SQL и UNIX
- •2.4.8. SQL и персональные компьютеры
- •2.4.9. SQL, хранилища данных и интеллектуальные ресурсы предприятия
- •2.4.10. SQL и интернет-приложения
- •2.5. Основы SQL
- •2.5.1. Использование SQL для извлечения информации из таблиц
- •2.5.2. Команда SELECT
- •2.5.3. Создание более сложных предикатов в предложении SELECT
- •2.5.4. Формирование вывода запросов
- •2.5.5. Агрегатные группы
- •2.6. Запросы к нескольким таблицам
- •2.6.1. Подзапросы
- •2.6.2. Использование операторов ANY, ALL и SOME
- •2.6.3. Использование предложения UNION
- •2.6.4. Ввод, удаление и изменение значения поля
- •2.7. DDL (Язык описания данных)
- •2.7.1. Создание таблиц
- •2.7.2. Индексы
- •2.7.3. Изменение структуры таблицы после ее создания
- •2.8. Ограничение данных
- •2.8.1. Ограничение таблиц
- •2.8.2. Установка значений по умолчанию
- •2.9. Поддержка целостности данных
- •2.9.1. Первичные ключи
- •2.9.2. Пользовательские представления
- •2.10. Модификация данных с помощью представлений
- •2.11. Разграничение доступа в базе данных
- •Глава 3. Математические основы реляционных баз данных
- •3.1. Отношения и их схемы
- •3.2. Реляционные операторы
- •3.2.1. Булевы операции
- •3.2.2. Оператор выбора
- •3.2.3. Оператор проекции
- •3.2.4. Оператор соединения
- •3.2.5. Другие операции на отношениях
- •3.2.6. Оператор деления
- •3.2.7. Оператор переименования атрибутов
- •3.2.8. Оператор эквисоединения
- •3.2.9. Расширения для сравнения на доменах
- •3.2.9.1. Расширение выбора
- •3.3. Реляционная алгебра
- •3.3.1. Дополнительные операторы
- •3.3.1.1. Оператор расщепления
- •3.3.1.2. Оператор FACTOR
- •3.4. Функциональные зависимости
- •3.4.1. Определение
- •3.4.2. Аксиомы вывода
- •3.4.3. Применение аксиом вывода
- •3.4.4. Выводы на основе аксиом вывода
- •3.4.6. Направленные ациклические графы вывода
- •3.4.7. Проверка принадлежности к замыканию множества функциональных зависимостей
- •3.5. Покрытия функциональных зависимостей
- •3.5.1. Покрытия и эквивалентность
- •3.5.2. Неизбыточные покрытия
- •3.5.3. Редуцированные покрытия
- •3.5.3.1. Посторонние атрибуты
- •3.5.3.3. Алгоритм построения редуцированного покрытия
- •3.5.3.4. Канонические покрытия
- •3.5.3.5. Структура неизбыточных покрытий
- •3.5.4. Минимальные покрытия
- •3.5.4.1. Прямая определяемость
- •3.5.4.2. Вычисление минимальных покрытий
- •3.5.4.3. Оптимальные покрытия
- •3.5.5. Составные функциональные зависимости
- •3.5.6. Кольцевые покрытия
- •3.6. Многозначные зависимости и зависимости соединения
- •3.6.1. Многозначные зависимости
- •3.6.2. Многозначные и функциональные зависимости
- •3.6.3. Аксиомы вывода для многозначных зависимостей
- •3.6.4. Только многозначные зависимости
- •3.6.5. Функциональные и многозначные зависимости
- •3.6.6. Зависимости соединения
- •3.7. Синтез схем реляционных баз данных
- •3.7.1. Базы данных и их схемы
- •3.7.2. Нормальные формы баз данных
- •3.7.2.1. Первая нормальная форма
- •3.7.2.2. Вторая нормальная форма
- •3.7.2.4. Нормальная форма Бойса - Кодда (НФБК)
- •3.7.2.5. Четвертая нормальная форма
- •3.7.2.3. Третья нормальная форма
- •3.8. Алгоритмы синтеза схем баз данных
- •3.8.1. Нормализация через декомпозицию
- •3.8.2. Недостатки нормализации через декомпозицию
- •3.8.3. Нормализация посредством синтеза
- •Глава 4. Система управления базами данных PostgreSQL
- •4.1. Установка
- •4.2. Запуск и останов сервера PostgreSQL
- •4.2.1. Утилита psql
- •4.2.2. Создание базы данных
- •4.3. Объекты базы данных
- •4.4. Функции и операторы
- •4.4.1. Логические операторы
- •4.4.2. Операторы сравнения
- •4.5. Клиентские приложения PostgreSQL
- •4.5.1. clusterdb
- •4.5.2. createdb
- •4.5.3. createuser
- •4.5.4. dropdb
- •4.5.5. dropuser
- •4.5.6. ecpg
- •4.5.7. pg_basebackup
- •4.5.8. pgbench
- •4.5.9. pg_config
- •4.5.10. pg_dump
- •4.5.11. pg_dumpall
- •4.5.12. pg_isready
- •4.5.13. pg_receivewal
- •4.5.14. pg_restore
- •4.5.15. psql
- •4.5.16. reindexdb
- •4.5.17. vacuumdb
- •4.6. Серверные приложения PostgreSQL
- •4.6.1. initdb
- •4.6.2. pg_archivecleanup
- •4.6.3. pg_checksums
- •4.6.4. pg_controldata
- •4.6.6. pg_resetwal
- •4.6.7. pg_rewind
- •4.6.8. pg_test_fsync
- •4.6.9. pg_test_timing
- •4.6.10. pg_upgrade
- •4.6.11. pg_waldump
- •4.6.12. postgres
- •4.6.13. postmaster
- •4.7. Серверное программирование
- •4.7.1. Расширение SQL
- •4.7.2. Триггеры
- •Заключение
- •Библиографический список
- 130 -
Отношения предметы и специальности оба во второй нормальной форме, и, следовательно, схема базы данных R = { (ГРУППА ПРЕДМЕТ ЛЕКТОР { ГРУППА ПРЕДМЕТ }), (ГРУППА СПЕЦИАЛЬНОСТЬ {ГРУППА})} тоже находится во второй нормальной форме.
3.7.2.3. Третья нормальная форма
Рассмотрим теперь отношение лекторы (ЛЕКТОР КАФЕДРА ФАКУЛЬТЕТ), удовлетворяющее F-зависимостям ЛЕКТОР → КАФЕДРА и КАФЕДРА ФАКУЛЬТЕТ и находящееся во второй нормальной форме, но, несмотря на это, обладающее рядом нежелательных свойств.
лекторы ( ЛЕКТОР |
КАФЕДРА |
ФАКУЛЬТЕТ ) |
||
|
Кузьмин |
ЭВМ |
ФВТ |
|
|
Логинов |
ЭВМ |
ФВТ |
|
|
Скворцов |
САПР ВС |
ФВТ |
|
|
Терехин |
ВПМ |
ФВТ |
|
|
Шумов |
ТОР |
РТФ |
|
Приведем эти свойства:
1.Операция обновление CH (лекторы; ЛЕКТОР = Логинов; КАФЕДРА = «ВПМ») приводит к нарушению F-зависимости ЛЕКТОР КАФЕДРА.
2.Содержится избыточная информация о принадлежности кафедры факультету.
3.Не имеется возможности хранить информацию о принадлежности к определенным факультетам кафедр, для преподавателей которых нет ни одной записи в отношении лекторы.
4.При удалении записи DEL(лекторы; ЛЕКТОР = «Шумов») пропадает полностью информация о принадлежности кафедры ТОР к РТФ.
Все эти проблемы решаются после декомпозиции отношения на пару — преподаватели и кафедры.
преподаватели ( ЛЕКТОР КАФЕДРА )
Кузьмин ЭВМ Логинов ЭВМ
|
- 131 - |
Скворцов |
САПР ВС |
Терехин |
ВПМ |
Шумов |
ТОР |
кафедры ( КАФЕДРА |
ФАКУЛЬТЕТ ) |
||
|
ЭВМ |
ФВТ |
|
|
САПР ВС |
ФВТ |
|
|
ВПМ |
ФВТ |
|
|
ТОР |
РТФ |
|
Для данной схемы R, атрибута A R, X R и множества F- зависимостей F над схемой R атрибут A транзитивно зависит от атрибута X, если существует такое множество Y в R, что X Y, Y A и F Y X относительно F и A X Y .
Пример. R = ЛЕКТОР КАФЕДРА ФАКУЛЬТЕТ, F = {ЛЕКТОР → КАФЕДРА, КАФЕДРА ФАКУЛЬТЕТ}. Атрибут ФАКУЛЬТЕТ транзитивно зависит от атрибута ЛЕКТОР через атрибут КАФЕДРА.
Схема отношения находится в третьей нормальной форме (3НФ) относительно множества функциональных зависимостей F, если она находится в первой нормальной форме, и каждый непервичный атрибут не транзитивно зависит от каждого ключа в R. Схема базы данных R находится в третьей нормальной форме, если каждое из составляющих ее отношений находится в третьей нормальной форме.
Пример. Для рассмотренного ранее отношения со схемой R = = ЛЕКТОР КАФЕДРА ФАКУЛЬТЕТ наличие транзитивной зависимости факультета от лектора препятствует наличию 3НФ, а для схемы базы данных R = { ЛЕКТОР КАФЕДРА, КАФЕДРА ФАКУЛЬТЕТ } транзитивной зависимости нет, следовательно, как каждая из схем отношений, так и схема базы данных в целом находятся в 3НФ.
Казалось бы, что в определении третьей нормальной формы следует ссылаться не на первую нормальную форму, а на вторую, однако любая схема, находящаяся в третьей нормальной форме, одновременно удовлетворяет и ограничениям, накладываемым на вторую нормальную форму.
Действительно, частичная зависимость является частным случаем транзитивной зависимости. Предположим, что непервичный атрибут A в R частично зависит от ключа K R. В этом случае
- 132 -
обязательно существует K K такое, что F K A. В данном случае
нет зависимости K K, поскольку тогда K должно быть ключом R, что противоречит начальному условию. Условие A K тоже удовлетворяется, поскольку по условию A — непервичный атрибут.
3.7.2.4. Нормальная форма Бойса - Кодда (НФБК)
Не будем останавливаться подробно на этой нормальной форме, поскольку она носит вспомогательный характер и используется в основном для того, чтобы алгоритмы построения схем реляционных баз данных работали более корректно.
Схема отношения R находится в нормальной форме Бойса - Кодда (НФБК) относительно множества F-зависимостей F, если она находится в первой нормальной форме и никакой атрибут в R не зависит транзитивно ни от одного ключа в R. Схема базы данных R находится в НФБК относительно множества F-зависимостей F, если каждая схема отношения из R находится в НФБК относительно F.
Как видно из определения, основное отличие НФБК от 3НФ заключается в том, что рассматриваются не только непервичные атрибуты, но и входящие в состав ключей отношения. Определение можно для удобства сформулировать несколько иначе. Схема находится в НФБК относительно множества F-зависимостей, если для любого Y R и для каждого атрибута A R - Y из Y A следует
Y R.
Для схемы, не находящейся в НФБК, всегда можно провести декомпозицию, приводящую к НФБК.
3.7.2.5. Четвертая нормальная форма
Известно, что каждое отношение r (R), удовлетворяющее многозначной зависимости X Y , может разлагаться без потерь на
схемы X Y и X Z, где Z = R-(X Y). Следует заметить, что в случае, когда это единственная зависимость на схеме R, схема автоматически находится в третьей нормальной форме и, следовательно, 3НФ не определяет все возможные декомпозиции.
MV-зависимость X Y приложима к схеме R, если X Y R, и
тривиальна для произвольной схемы R, содержащей X Y ,если ей удовлетворяет любое отношение r (R).
-133 -
Ктривиальным зависимостям относятся такие, для которых выполняется одно из условий: либо X Y, либо X Y = R. Для первого
случая декомпозиция будет производиться на схемы R1 = X Y = X и R2 =
X Z = X (R - (X Y) = X (R - X ) = R. Для второго случая R1 = X Y = R и R2 = X Z = X (R - (X Y) = X (R - R ) = X. В обоих случаях одна из схем представляет собой R, следовательно, декомпозиция не имеет
никакого смысла.
Другими словами, нас интересуют с точки зрения декомпозиции только те зависимости, все атрибуты которых входят в схему, декомпозицию которой мы и рассматриваем.
Схема отношения R находится в четвертой нормальной форме относительно множества MV- и F-зависимостей F, если для каждой MV-зависимости X Y , выводимой из F и
приложимой к R, либо MV-зависимость тривиальна, либо X является суперключом для R. Схема базы данных R находится в четвертой нормальной форме, если каждая входящая в нее схема находится в четвертой нормальной форме относительно F.
|
Пример. Отношение |
расписание |
со схемой |
R |
= |
= ПРЕПОДАВАТЕЛЬ СТУДЕНТ ДЕНЬ_НЕДЕЛИ и |
K |
= |
|||
= { |
ПРЕПОДАВАТЕЛЬ |
СТУДЕНТ |
ДЕНЬ_НЕДЕЛИ |
|
}, |
удовлетворяющее множеству, состоящему из одной MV-зависимости |
|||||
F = { ПРЕПОДАВАТЕЛЬ |
СТУДЕНТ }, не удовлетворяет 4НФ, |
||||
поскольку зависимость не тривиальна и ее левая часть (ПРЕПОДАВАТЕЛЬ) не является суперключом для R. Декомпозиция отношения расписание на отношения r и s позволяет получить схему базы данных R = { ПРЕПОДАВАТЕЛЬ СТУДЕНТ, ПРЕПОДАВАТЕЛЬ ДЕНЬ_НЕДЕЛИ}, находящуюся в 4НФ.
Рассмотрим теперь схему R, для которой выполняется зависимость X Y, для случая, когда X — ключ схемы R. Декомпозиция
происходит на отношения со схемами X Y и X Z. Известно, что при проекции на схему, содержащую ключ, количество кортежей в проекции остается таким же, что и в исходном отношении, поскольку значение ключа уникально для каждой записи и, следовательно, не может при проецировании появиться дублей записей, если не будет удален ни один из атрибутов, входящих в ключ. Таким образом, декомпозиция теряет всякий смысл.
