- •Введение
- •Глава 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. Триггеры
- •Заключение
- •Библиографический список
- 11 -
Контрольные вопросы
1.Можно ли считать базой данных всемирную сеть Интернет? Обоснуйте ответ.
2.Из каких основных компонентов состоит информационная система, использующая базу данных?
3.Назовите основные модели данных.
4.Каковы основные функции системы управления базой данных?
5.Что такое транзакция?
6.Как можно оценить качество информационно-поисковой системы?
Глава 2. SQL
К большому счастью для всех программистов, работающих с реляционными базами данных, они понимают единственный язык - SQL (Structured Query Language — язык структурированных запросов), который является декларативным языком программирования, применяемым для создания, модификации и управления данными в реляционной базе данных, управляемой соответствующей системой управления базами данных.
В этой главе будем работать с учебной базой данных, приняв на веру, что она создана корректно. Вопросы проектирования корректной базы данных будем рассматривать в следующей главе, которая и будет посвящена теории проектирования реляционных баз данных.
2.1. История появления и развития SQL
История SQL неразрывно связана с реляционной моделью данных, разработанной доктором Э.Ф. Коддом в 1970 году, и началом разработки проекта System/R компании IBM.
Кроме разработки самой СУБД, в рамках проекта System/R проводилась работа над созданием языков запросов к базе данных, который был назван SEQUEL (Structured English Query Language— структурированный английский язык запросов). В 1976-1977 годах разработанный прототип проекта System/R был полностью переделан, и в 1978-1979 годах новая реализация проекта System/R была установлена для опытной эксплуатации. Язык был переименован в SQL. В 1979 году исследовательский проект System/R завершился, и IBM сделала заключение, что реляционные базы данных не только вполне работоспособны, но и могут служить основой для создания коммерческих программных продуктов.
- 12 -
Далее к разработке реляционных СУБД подключились компании Oracle в 1979 году и Relational Technology, которая выпускает СУБД Ingres в 1981 году.
В1982 году ANSI формирует комитет по стандартизации языка SQL, и в 1983 году компания IBM создает СУБД DB2.
1986 год отмечен тем, что ANSI принимает стандарт SQL1, а компания Sybase создает СУРБД для обработки транзакций.
ISO одобряет стандарт SQL1 в 1987 году, а в 1988 году компании Ashton-Tate и Microsoft объявляют о выпуске СУБД SQL Server для операционной системы OS/2
В1991 году консорциум SQL Access Group публикует спецификацию доступа к базам данных.
В1992 году Microsoft публикует спецификацию протокола ODBC, ANSI принимает стандарт SQL2 (SQL-92).
В1993 году появляются первые поставки систем обслуживания хранилищ данных и программных продуктов, поддерживающих протокол ODBC, а в 1994 - коммерческие поставки серверов баз данных, поддерживающих параллельную обработку.
Особенно хочется отметить появление в 1995 году первой СУРБД
соткрытым кодом MySQL.
1996 год - опубликованы стандарт API-функций для доступа к базам данных OLAP и тест производительности OLAP-систем.
1997 год - ведущие поставщики СУБД объявили о поддержке Java-технологий.
1998 год - СУБД Oracle 8i стала обеспечивать интеграцию баз данных с Интернетом.
В1999 году J2EE стандартизировал JDBC-доступ к базам данных со стороны серверов приложений, и принимается стандарт ANSI/ISO SQL1999 с добавлением в язык объектно-ориентированных конструкций.
В2000 году Oracle выпускает серверы приложений с интегрированным кешированием баз данных.
В2001 году в основных СУРБД появляется возможность поддержки XML.
2003 год - принят стандарт ANSI/ISO SQL:2003, в который добавлен SQL/XML.
2006 год - принят стандарт ANSI/ISO SQL:2006 с существенным расширением SQL/XML и объектно-ориентированных конструкций.
2008 год - принят стандарт ANSI/ISO SQL:2008.
