- •Введение
- •Глава 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. Триггеры
- •Заключение
- •Библиографический список
-139 -
3.8.3.Нормализация посредством синтеза
Рассмотренных недостатков можно избежать, используя другие методы. При этом решается та же проблема, что и при использовании алгоритма нормализации через декомпозицию, — нахождение схемы базы данных в третьей нормальной форме.
При заданной схеме R и множестве F-зависимостей следует получить схему базы данных R = { R 1, R 2, ..., R p }, которая будет удовлетворять следующим условиям:
1.Множество F полностью характеризуется с помощью
схемы R, другими словами, F { Ki Ri | Ri R при Ki — ключ Ri}.
2.Каждая схема Ri находится в 3НФ относительно F.
3.Не существует схемы базы данных с числом отношений, меньшим, чем R, которые в то же время удовлетворяют условиям 1 и 2.
4.Для любого отношения, удовлетворяющего F, справедлива декомпозиция без потерь
5.r=πR 1(r) π R2 (r) … π Rp (r) .
Основная идея алгоритма заключается в том, что после построения кольцевого покрытия можно на его основе непосредственно синтезировать схему базы данных. Именно из-за этого алгоритм и называется алгоритмом синтеза.
Алгоритм будет иметь полиномиальную сложность, поскольку основными трудоемкими операциями, характерными для него, будут такие, как нахождение редуцированного, минимального, кольцевого покрытия для исходного множества F-зависимостей. Таким образом, будет решаться первая проблема, возникающая при использовании алгоритма декомпозиции. Вторая и третья проблемы не возникают изза свойства 3, четвертая — из-за свойства 1, а пятая не возникает благодаря свойствам 1 и 3.
Лемма. Если имеется схема базы данных R, представляющая множество F-зависимостей G, то она состоит не менее чем из |EG| схем отношений.
Действительно, все F-зависимости, относящиеся к конкретной схеме R R, должны иметь эквивалентные левые части, иначе обязательно возникает либо частичная определяемость, либо транзитивная зависимость непервичного атрибута от ключа в схеме и ее надо подвергать декомпозиции, следовательно, общее количество схем должно увеличиться. Таким образом, если K1 и K2 — ключи
- 140 -
схемы R, то выполняются зависимости K1 R и K2 R, следовательно, K1 K2 и K2 K1. Отсюда каждое отношение может включать зависимости не более чем одного класса эквивалентности EG, а для представления всех схем потребуется не менее |EG| схем.
Лемма непосредственно указывает путь построения алгоритма синтеза через нахождение неизбыточного покрытия F исходного множества F и вычисление классов эквивалентности |EG`|. Для каждого множества EF` из EF` строится схема отношения Ri по следующим правилам:
Ki = eF`(X) — множество выделенных ключей для схемы Ri.
Ri = { A | A входит в левую или правую часть любой F-
зависимости из EF`(X) }.
Однако полученная схема может не оказаться в 3НФ относительно F.
Пример. F = F = {A BC, B C}, R = A B C. Для данного множества F-зависимостей мы имеем два класса эквивалентности и, следовательно, получаем в соответствии с вышеизложенными правилами следующую схему базы данных: R = {R1, R2} = { ( ABC, {A} ), (BC {B})}. Заметим, что первое отношение не удовлетворяет 3НФ из-за транзитивности A B C, которая возникает по причине нередуцированности F, содержащего посторонний атрибут C в зависимости A BC. После его удаления схема базы данных примет
вид R = {R1, R2} = { ( AB, {A} ), (BC {B} )}.
Однако даже при наличии редуцированного множества F- зависимостей могут возникнуть сложности, связанные с тем, что при переходе от редуцированного покрытия F-зависимостей к кольцевому, может быть получено нередуцированное покрытие (смотрите пример для кольцевых покрытий).
Таким образом, алгоритм синтеза должен включать следующие шаги:
1 Найти для множества F-зависимостей редуцированное минимальное кольцевое покрытие G.
2 Для каждой CF-зависимости (X1, X2, ... , Xk) Y построить схему
отношения R = ( X1 X2 ... Xk Y, { X1, X2, ... , Xk } ).
Пример. Рассмотрим тот же пример, что и для алгоритма нормализации через декомпозицию:
R = БИЛЕТ КНИЖКА СТУДЕНТ ГРУППА ПАСПОРТ ПОЛ СПЕЦИАЛЬНОСТЬ СТАРОСТА КУРАТОР ЛЕКТОР ДОЛЖНОСТЬ КАФЕДРА ФАКУЛЬТЕТ ЗАВЕДУЮЩИЙ ДЕКАН ДИСЦИПЛИНА СЕМЕСТР ЛЕКТОР ОЦЕНКА.
K = { КНИЖКА ДИСЦИПЛИНА }.
- 141 -
Для приведенного отношения характерны следующие F- зависимости из множества:
F = {КНИЖКА ДИСЦИПЛИНА ОЦЕНКА,
КНИЖКА БИЛЕТ СТУДЕНТ ГРУППА ПАСПОРТ ПОЛ, БИЛЕТ КНИЖКА СТУДЕНТ ГРУППА ПАСПОРТ ПОЛ, ПАСПОРТ БИЛЕТ КНИЖКА СТУДЕНТ ГРУППА ПОЛ, СТУДЕНТ БИЛЕТ КНИЖКА ГРУППА ПАСПОРТ ПОЛ, БИЛЕТ ГРУППА, ГРУППА СПЕЦИАЛЬНОСТЬ СТАРОСТА КУРАТОР,
СПЕЦИАЛЬНОСТЬ КАФЕДРА, КАФЕДРА ФАКУЛЬТЕТ ЗАВЕДУЮЩИЙ ФАКУЛЬТЕТ ДЕКАН,
ДИСЦИПЛИНА СПЕЦИАЛЬНОСТЬ КАФЕДРА СЕМЕСТР ЛЕКТОР
ЛЕКТОР КАФЕДРА ДОЛЖНОСТЬ}.
Получим неизбыточное редуцированное покрытие F F ={КНИЖКА ДИСЦИПЛИНА ОЦЕНКА, СТУДЕНТ БИЛЕТ КНИЖКА ПАСПОРТ ПОЛ ГРУППА, БИЛЕТ СТУДЕНТ, КНИЖКА СТУДЕНТ, ПАСПОРТ СТУДЕНТ,
ГРУППА СПЕЦИАЛЬНОСТЬ СТАРОСТА КУРАТОР, СПЕЦИАЛЬНОСТЬ КАФЕДРА, КАФЕДРА ФАКУЛЬТЕТ ЗАВЕДУЮЩИЙ ФАКУЛЬТЕТ ДЕКАН,
ДИСЦИПЛИНА СПЕЦИАЛЬНОСТЬ КАФЕДРА СЕМЕСТР ЛЕКТОР
ЛЕКТОР КАФЕДРА ДОЛЖНОСТЬ}.
Преобразуем к кольцевому покрытию и редуцируем. В результате получим
G ={(КНИЖКА ДИСЦИПЛИНА) ОЦЕНКА,
(СТУДЕНТ, БИЛЕТ, КНИЖКА, ПАСПОРТ) ПОЛ ГРУППА, (ГРУППА) СПЕЦИАЛЬНОСТЬ СТАРОСТА КУРАТОР, (СПЕЦИАЛЬНОСТЬ) КАФЕДРА, (КАФЕДРА) ФАКУЛЬТЕТ ЗАВЕДУЮЩИЙ, (ФАКУЛЬТЕТ) ДЕКАН,
(ДИСЦИПЛИНА СПЕЦИАЛЬНОСТЬ) КАФЕДРА СЕМЕСТР ЛЕКТОР,
(ЛЕКТОР) КАФЕДРА ДОЛЖНОСТЬ}.
- 142 -
После преобразования получим схемы отношений, составляющих схему базы данных:
R1 = КНИЖКА ДИСЦИПЛИНА |
K1 = { КНИЖКА ДИСЦИПЛИНА } |
||
ОЦЕНКА |
|
|
|
|
|
||
R2 = СТУДЕНТ БИЛЕТ КНИЖКА |
K2 = { СТУДЕНТ, БИЛЕТ, КНИЖКА, |
||
ПАСПОРТ ПОЛ ГРУППА |
ПАСПОРТ } |
||
|
|
||
R3 = ГРУППА СПЕЦИАЛЬНОСТЬ |
K3 = { ГРУППА } |
||
СТАРОСТА КУРАТОР |
|
|
|
|
|
||
R4 = СПЕЦИАЛЬНОСТЬ КАФЕДРА |
K4 = { СПЕЦИАЛЬНОСТЬ } |
||
|
|
|
|
R5 |
= КАФЕДРА ФАКУЛЬТЕТ |
K5 |
= { КАФЕДРА } |
ЗАВЕДУЮЩИЙ |
|
|
|
|
|
|
|
R6 |
= ФАКУЛЬТЕТ ДЕКАН |
K6 |
= { ФАКУЛЬТЕТ } |
|
|
|
|
R7 |
= ДИСЦИПЛИНА |
K7 |
= { ДИСЦИПЛИНА |
СПЕЦИАЛЬНОСТЬ КАФЕДРА |
СПЕЦИАЛЬНОСТЬ } |
||
СЕМЕСТР ЛЕКТОР |
|
|
|
|
|
|
|
R8 |
= ЛЕКТОР КАФЕДРА |
K8 |
= { ЛЕКТОР } |
ДОЛЖНОСТЬ |
|
|
|
Контрольные вопросы
1.Приведите пример функциональной зависимости из предметной области «Аптека».
2.Что собой представляет замыкание множества функциональных зависимостей?
3.Для чего нужны аксиомы вывода функциональных зависимостей?
4.Чем отличаются аксиомы Армстронга от классических аксиом вывода?
5.Чем активный домен атрибута отличается от просто домена атрибута?
6.Как вы понимаете атомарность атрибута?
7.Какая функциональная зависимость называется транзитивной?
8.Что такое частичная функциональная зависимость?
9.Дайте определение второй нормальной формы баз данных.
10.Приведите пример многозначной зависимости.
11.Приведите пример зависимости соединения.
12.Как работает алгоритм нормализации через декомпозицию?
13.Как работает алгоритм синтеза схемы реляционной базы
данных?
