- •Введение
- •Глава 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. Триггеры
- •Заключение
- •Библиографический список
- 123 -
Пусть r - удовлетворяет зависимости соединения *[R1, R2, ..., Rp]. Если r содержит кортежи t1, t2, ..., ti, ..., tj, ..., tp такие, что для всех i, j справедливо ti (Ri Rj) = tj (Ri Rj), то r содержит кортеж t такой, что t (Ri ) = tj (Ri ).
Пример. Предположим, что отношение r (ABCDE) удовлетворяет j-зависимости *[ABC, BD, CDE] и содержит три кортежа
r( |
A |
B |
C |
D |
E |
) |
t1 |
a |
b |
c |
d |
e |
|
t2 |
a |
b |
c |
d |
e |
|
t3 |
a |
b |
c |
d |
e |
|
для которых справедливо
t1 ( ABC BD ) = t2 ( ABC BD ) = b,
t1 ( ABC CDE ) = t3 ( ABC CDE ) = c, t2 ( BD CDE ) = t3 ( BD CDE ) = d .
Следовательно, в отношении r должен содержаться кортеж t такой, что
t ( ABC ) = t1 ( ABC ) = < a b c >, t ( BD) = t2 ( BD) = < b d >,
t (CDE ) = t3 ( CDE ) = < c d e >.
Следовательно, в отношении r, для того чтобы оно удовлетворяло зависимости соединения *[ABC, BD, CDE], обязательно должен присутствовать кортеж t = < a b c d e >.
3.7. Синтез схем реляционных баз данных
Все предыдущие теоретические выкладки реально служили базой для разработки схем реляционных баз данных, которые за счет снижения избыточности данных позволяют избавиться от аномалий данных при выполнении основных операций над данными.
3.7.1. Базы данных и их схемы
Ранее нами рассматривались отношения исключительно как множество атрибутов. Теперь наряду с атрибутами следует рассматривать и ключи отношения, при этом схема R будет состоять из множества атрибутов S и множества выделенных ключей K и обозначаться как R ( S, K ).
Пусть U — множество атрибутов, тогда схемой реляционной базы данных R над U называется совокупность схем
- 124 -
отношений {R1, R2, ..., Rp}, где Ri = ( Si, Ki), 1 i p,
p
Si U , Si Sj при i j.
i 1
Реляционной базой данных d со схемой базы данных R называется некая совокупность отношений {r1, r2, ..., rp} - такая, что для каждой схемы R = ( S, K ) из R существует отношение r в d, которое является отношением со схемой S и удовлетворяет каждому ключу из K.
Пример. В таблице приведена база данных d = { оценки, предметы} со схемой базы данных R = {( ФАМИЛИЯ ПРЕДМЕТ ОЦЕНКА { ФАМИЛИЯ ПРЕДМЕТ }), (ПРЕДМЕТ СЕМЕСТР { ПРЕДМЕТ })}.
оценки( |
ФАМИЛИЯ |
ПРЕДМЕТ |
ОЦЕНКА ) |
|
|
|
|
|
|
|
Балашов |
физика |
5 |
|
|
Катеринченко |
физика |
4 |
|
|
Колычева |
история |
3 |
|
|
Малин |
история |
4 |
|
|
Катеринченко |
химия |
4 |
|
|
Колычева |
химия |
5 |
|
|
Малин |
химия |
4 |
|
предметы( ПРЕДМЕТ |
СЕМЕСТР ) |
||
|
|
|
|
|
физика |
1 |
|
|
история |
1 |
|
|
химия |
2 |
|
Оба отношения получены путем декомпозиции отношения
успеваемость.
успеваемость( ФАМИЛИЯ ПРЕДМЕТ ОЦЕНКА СЕМЕСТР )
Балашов |
физика |
5 |
1 |
Катеринченко |
физика |
4 |
1 |
Колычева |
история |
3 |
1 |
Малин |
история |
4 |
1 |
Катеринченко |
химия |
4 |
2 |
Колычева |
химия |
5 |
2 |
Малин |
химия |
4 |
2 |
Теперь надо дать целый ряд определений, с которыми придется постоянно оперировать при обсуждении схем реляционных баз данных.
