Основы технологий баз данных
Покупка
Тематика:
Системы управления базами данных (СУБД)
Издательство:
ДМК Пресс
Под ред.:
Рогов Е. В.
Год издания: 2020
Кол-во страниц: 582
Дополнительно
Вид издания:
Учебное пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-97060-841-8
Артикул: 745419.02.99
Материал первой части учебного пособия составляет основу для базового курса и содержит краткий обзор требований и критериев оценки СУБД и баз данных, теоретическую реляционную модель данных, основные конструкции языка запросов SQL, организацию доступа к базе данных PostgreSOL, вопросы проектирования приложений и основные расширения, доступные в системе PostgreSOL. Вторая часть, добавленная в настоящем издании, содержит материал, который будет полезен разработчикам баз данных и СУБД. В ней подробно рассматриваются структуры хранения, методы выполнения и оптимизации запросов, дополнительные возможности языка SQL, средства поддержки согласованности и надежности. Рассмотрены средства программирования серверов баз данных, средства расширения функциональности PostgreSOL, вопросы создания систем с репликацией, параллельных и распределенных систем баз данных.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Компания Postgres Professional Б. А. Новиков, Е. А. Горшкова, Н. Г. Графеева Основы технологий баз данных Второе издание Москва, 2020
УДК 004.65 ББК 32.972.134 Н73 Новиков Б. А. Н73 Основы технологий баз данных: учебное пособие / Б. А. Новиков, Е. А. Горшкова, Н. Г. Графеева; под ред. Е. В. Рогова. — 2-е изд. — М.: ДМК Пресс, 2020. — 582 с. ISBN 978-5-97060-841-8 Материал первой части учебного пособия составляет основу для базового курса и содержит краткий обзор требований и критериев оценки СУБД и баз данных, теоретическую реляционную модель данных, основные конструкции языка запросов SQL, организацию доступа к базе данных PostgreSQL, вопросы проектирования приложений и основные расширения, доступные в системе PostgreSQL. Вторая часть, добавленная в настоящем издании, содержит материал, который будет полезен разработчикам баз данных и СУБД. В ней подробно рассматриваются структуры хранения, методы выполнения и оптимизации запросов, дополнительные возможности языка SQL, средства поддержки согласованности и надежности. Рассмотрены средства программирования серверов баз данных, средства расширения функциональности PostgreSQL, вопросы создания систем с репликацией, параллельных и распределенных систем баз данных. Сайт книги: https://postgrespro.ru/education/books/dbtech. Для программистов и студентов УДК 004.655 ББК 32.973.134 ISBN 978-5-6041193-5-8 © Текст, оформление, ООО «ППГ», 2019, 2020 ISBN 978-5-97060-841-8 © Издание, ДМК Пресс, 2020
Оглавление О курсе 13 На кого ориентирован курс . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Какие знания будут получены . . . . . . . . . . . . . . . . . . . . . . . . . 13 Структура курса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Программные средства, используемые в курсе . . . . . . . . . . . . . . . 14 Благодарности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Часть I. От теории к практике 17 Глава 1. Введение 19 1.1. Базы данных и СУБД . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.2. Требования к СУБД . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 1.3. Разделение данных и программ . . . . . . . . . . . . . . . . . . . . 23 1.4. Языки запросов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 1.5. Целостность и согласованность . . . . . . . . . . . . . . . . . . . . . 26 1.6. Отказоустойчивость . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 1.7. Безопасность и разграничение доступа . . . . . . . . . . . . . . . . 29 1.8. Производительность . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 1.9. Создание приложений, взаимодействующих с базой данных . . . 33 1.10.Итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 1.11.Контрольные вопросы . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Глава 2. Теоретические основы БД 37 2.1. Модели данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.1.1. Идентификация и изменяемость . . . . . . . . . . . . . . . . 38 2.1.2. Навигация и поиск по значениям . . . . . . . . . . . . . . . 40 2.1.3. Объекты и коллекции объектов . . . . . . . . . . . . . . . . . 41 2.1.4. Свойства моделей данных . . . . . . . . . . . . . . . . . . . . 41 2.2. Реляционная модель данных . . . . . . . . . . . . . . . . . . . . . . 42 2.2.1. Основные понятия реляционной модели данных . . . . . . 43 2.2.2. Реляционная алгебра . . . . . . . . . . . . . . . . . . . . . . . 47 2.2.3. Другие языки запросов . . . . . . . . . . . . . . . . . . . . . 54 2.2.4. Особенности реляционной модели данных . . . . . . . . . . 56 2.2.5. Нормальные формы . . . . . . . . . . . . . . . . . . . . . . . 57 2.2.6. Практические варианты реляционной модели данных . . . 61 3
Оглавление 2.3. Средства концептуального моделирования . . . . . . . . . . . . . . 63 2.3.1. Модель данных «сущность — связь» . . . . . . . . . . . . . . 64 2.3.2. Концептуальные объектные модели . . . . . . . . . . . . . . 70 2.4. Объектные и объектно-реляционные модели данных . . . . . . . . 71 2.5. Другие модели данных . . . . . . . . . . . . . . . . . . . . . . . . . . 73 2.5.1. Слабоструктурированные модели данных . . . . . . . . . . 73 2.5.2. Модели для представления знаний . . . . . . . . . . . . . . 74 2.5.3. Ключ — значение . . . . . . . . . . . . . . . . . . . . . . . . . 74 2.5.4. Устаревшие модели данных . . . . . . . . . . . . . . . . . . . 75 2.6. Примеры проектирования схемы в модели «сущность — связь» . . 75 2.7. Библиографические комментарии . . . . . . . . . . . . . . . . . . . 81 2.8. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 Глава 3. Знакомимся с базой данных 85 3.1. Установка базы данных . . . . . . . . . . . . . . . . . . . . . . . . . 85 3.2. Подключение к серверу базы данных . . . . . . . . . . . . . . . . . 85 3.3. Простой клиент: psql . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 3.4. Итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 3.5. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 Глава 4. Введение в SQL 91 4.1. Назначение языка SQL . . . . . . . . . . . . . . . . . . . . . . . . . . 91 4.2. Быстрый старт . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 4.2.1. Простые типы данных . . . . . . . . . . . . . . . . . . . . . . 92 4.2.2. Основные конструкции и синтаксис . . . . . . . . . . . . . . 95 4.2.3. Описание данных: отношения . . . . . . . . . . . . . . . . . 95 4.2.4. Заполнение таблиц . . . . . . . . . . . . . . . . . . . . . . . . 99 4.2.5. Чтение данных . . . . . . . . . . . . . . . . . . . . . . . . . . 101 4.2.6. Модификация данных . . . . . . . . . . . . . . . . . . . . . . 103 4.3. Запросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 4.3.1. Фильтрация и проекция . . . . . . . . . . . . . . . . . . . . . 105 4.3.2. Произведение и соединение . . . . . . . . . . . . . . . . . . 106 4.3.3. Псевдонимы для таблиц . . . . . . . . . . . . . . . . . . . . . 111 4.3.4. Вложенные подзапросы . . . . . . . . . . . . . . . . . . . . . 112 4.3.5. Упорядочивание результата . . . . . . . . . . . . . . . . . . . 116 4.3.6. Агрегирование и группировка . . . . . . . . . . . . . . . . . 117 4.3.7. Теоретико-множественные операции . . . . . . . . . . . . . 119 4.3.8. Вывод результатов после модификации данных . . . . . . . 121 4.3.9. Последовательности . . . . . . . . . . . . . . . . . . . . . . . 122 4.3.10. Представления . . . . . . . . . . . . . . . . . . . . . . . . . . 124 4
Оглавление 4.4. Структуры хранения . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 4.5. Логическая организация данных . . . . . . . . . . . . . . . . . . . . 132 4.6. Итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 4.7. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Глава 5. Управление доступом в базах данных 139 5.1. Модели защиты и разграничения доступа . . . . . . . . . . . . . . 139 5.2. Пользователи и роли в СУБД . . . . . . . . . . . . . . . . . . . . . . 141 5.3. Объекты и привилегии . . . . . . . . . . . . . . . . . . . . . . . . . . 143 5.4. Итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 5.5. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 Глава 6. Транзакции и согласованность базы данных 147 6.1. Определение и основные требования к транзакциям . . . . . . . . 148 6.2. Аномалии конкурентного выполнения . . . . . . . . . . . . . . . . 150 6.3. Восстановимость . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 6.4. Диспетчеры и протоколы . . . . . . . . . . . . . . . . . . . . . . . . 154 6.5. Использование транзакций в приложениях . . . . . . . . . . . . . . 155 6.6. Уровни изоляции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 6.7. Точки сохранения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 6.8. Долговечность . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 6.9. Итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 6.10.Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 Глава 7. Разработка приложений СУБД 167 7.1. Проектирование схемы базы данных . . . . . . . . . . . . . . . . . 169 7.2. Объектно-реляционная потеря соответствия . . . . . . . . . . . . . 172 7.3. Использование каркасов объектно-реляционных отображений . . 174 7.3.1. Наследование . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 7.3.2. Запросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 7.3.3. Когда применять каркасы? . . . . . . . . . . . . . . . . . . . 179 7.4. Кеширование данных . . . . . . . . . . . . . . . . . . . . . . . . . . 180 7.5. Взаимодействие с базой данных . . . . . . . . . . . . . . . . . . . . 183 7.5.1. Параметры запросов . . . . . . . . . . . . . . . . . . . . . . . 183 7.5.2. Унифицированные средства взаимодействия . . . . . . . . 185 7.5.3. Интерфейс PostgreSQL для приложений . . . . . . . . . . . . 186 7.6. Некоторые общие задачи . . . . . . . . . . . . . . . . . . . . . . . . 187 7.6.1. Ограничение доступа к данным . . . . . . . . . . . . . . . . 187 7.6.2. Поддержка многоязычности . . . . . . . . . . . . . . . . . . 189 7.7. Настройка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 5
Оглавление 7.8. Проектирование декларативных запросов . . . . . . . . . . . . . . 194 7.9. Итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 7.10. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 Глава 8. Расширения реляционной модели 197 8.1. Ограниченность реализаций SQL . . . . . . . . . . . . . . . . . . . . 197 8.2. Реализация объектных расширений в PostgreSQL . . . . . . . . . . 200 8.2.1. Наследование . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 8.2.2. Определение типов данных . . . . . . . . . . . . . . . . . . . 201 8.2.3. Домены . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 8.2.4. Коллекции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 8.2.5. Указатели . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 8.3. Функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 8.4. Слабоструктурированные данные: JSON . . . . . . . . . . . . . . . 205 8.5. Слабоструктурированные данные: XML . . . . . . . . . . . . . . . . 209 8.6. Активные базы данных . . . . . . . . . . . . . . . . . . . . . . . . . 213 8.7. Итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 8.8. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 Глава 9. Разновидности СУБД 221 9.1. Классы приложений БД . . . . . . . . . . . . . . . . . . . . . . . . . 221 9.2. Структуры хранения . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 9.3. Архитектуры связи с приложениями . . . . . . . . . . . . . . . . . . 224 9.4. Оборудование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 9.4.1. Носители данных . . . . . . . . . . . . . . . . . . . . . . . . . 226 9.4.2. Вычислительные ресурсы . . . . . . . . . . . . . . . . . . . . 228 9.5. Хранилища данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 9.5.1. Агрегатно-ориентированные базы данных . . . . . . . . . . 232 9.5.2. Базы данных на основе графов . . . . . . . . . . . . . . . . . 233 9.6. Выбор СУБД для построения информационных систем . . . . . . . 233 9.7. Итоги главы и первой части . . . . . . . . . . . . . . . . . . . . . . . 236 9.8. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 Часть II. От практики к мастерству 239 Глава 10. Архитектура СУБД 241 10.1. Интерфейс приложений . . . . . . . . . . . . . . . . . . . . . . . . 242 10.2. Обеспечение согласованности и отказоустойчивости . . . . . . . 243 10.3. Выполнение запросов . . . . . . . . . . . . . . . . . . . . . . . . . . 244 6
Оглавление 10.4. Организация хранения данных . . . . . . . . . . . . . . . . . . . . 246 10.5. Управление процессами и оперативной памятью . . . . . . . . . 248 10.6. Параллельные и распределенные базы данных . . . . . . . . . . . 249 10.7. Расширения и расширяемость . . . . . . . . . . . . . . . . . . . . . 251 10.8. Безопасность . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 10.9. Итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 10.10. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 Глава 11. Структуры хранения и основные алгоритмы СУБД 255 11.1. Хранение объектов логического уровня . . . . . . . . . . . . . . . 255 11.1.1. Размещение коллекций объектов . . . . . . . . . . . . . . . 256 11.1.2. Размещение данных на страницах . . . . . . . . . . . . . . 260 11.1.3. Хранение больших объектов . . . . . . . . . . . . . . . . . . 263 11.1.4. Строки или колонки? . . . . . . . . . . . . . . . . . . . . . . 264 11.2. Индексы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 11.2.1. Одномерные индексы . . . . . . . . . . . . . . . . . . . . . 267 11.2.2. Пространственные индексы . . . . . . . . . . . . . . . . . . 275 11.2.3. Инвертированные индексные структуры . . . . . . . . . . 280 11.2.4. Разреженные индексы . . . . . . . . . . . . . . . . . . . . . 282 11.2.5. Сигнатурные индексы . . . . . . . . . . . . . . . . . . . . . 282 11.2.6. Особенности реализации индексов в PostgreSQL . . . . . . 284 11.3. Выполнение алгебраических операций . . . . . . . . . . . . . . . 286 11.3.1. Алгебраические операции и алгоритмы . . . . . . . . . . . 286 11.3.2. Операции выборки данных . . . . . . . . . . . . . . . . . . 287 11.3.3. Сортировка . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 11.3.4. Алгоритм вложенных циклов . . . . . . . . . . . . . . . . . 291 11.3.5. Алгоритм соединения на основе сортировки и слияния . 294 11.3.6. Соединение на основе хеширования . . . . . . . . . . . . . 297 11.3.7. Многопотоковое соединение . . . . . . . . . . . . . . . . . 299 11.4. Итоги главы и библиографические комментарии . . . . . . . . . 300 11.5. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 Глава 12. Выполнение и оптимизация запросов 303 12.1. Стадии обработки запроса . . . . . . . . . . . . . . . . . . . . . . . 303 12.2. Подготовка и выполнение . . . . . . . . . . . . . . . . . . . . . . . 306 12.3. Оптимизация запросов . . . . . . . . . . . . . . . . . . . . . . . . . 308 12.3.1. Задача оптимизации . . . . . . . . . . . . . . . . . . . . . . 308 12.3.2. Сокращение пространства планов . . . . . . . . . . . . . . 310 12.3.3. Алгоритмы оптимизации . . . . . . . . . . . . . . . . . . . 311 7
Оглавление 12.4. Модели стоимости . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 12.4.1. Функции и модели стоимости . . . . . . . . . . . . . . . . . 321 12.4.2. Модели стоимости для алгоритмов бинарных операций . 322 12.4.3. Оценки селективности . . . . . . . . . . . . . . . . . . . . . 325 12.4.4. Статистические характеристики данных . . . . . . . . . . 326 12.5. Другие подходы к оптимизации запросов . . . . . . . . . . . . . . 328 12.5.1. Адаптивное выполнение запросов . . . . . . . . . . . . . . 329 12.5.2. Параметрическая оптимизация . . . . . . . . . . . . . . . . 332 12.5.3. Семантическая оптимизация . . . . . . . . . . . . . . . . . 333 12.5.4. Многокритериальная оптимизация . . . . . . . . . . . . . 333 12.6. Итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 12.7. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 Глава 13. Управление транзакциями 337 13.1. Критерии корректности конкурентного выполнения . . . . . . . 338 13.1.1. Формальные модели корректности . . . . . . . . . . . . . . 338 13.1.2. Изоляция мгновенных снимков . . . . . . . . . . . . . . . . 347 13.1.3. Расписания с множественными версиями данных . . . . . 351 13.1.4. Восстановимость . . . . . . . . . . . . . . . . . . . . . . . . 354 13.1.5. Дополнительные свойства классов расписаний . . . . . . 357 13.2. Диспетчеры и протоколы . . . . . . . . . . . . . . . . . . . . . . . . 357 13.2.1. Требования и критерии оценки . . . . . . . . . . . . . . . . 358 13.2.2. Блокировки . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 13.2.3. Двухфазные протоколы, использующие блокировки . . . 362 13.2.4. Тупики . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364 13.2.5. Другие протоколы на основе блокирования . . . . . . . . . 366 13.2.6. Протокол на основе меток времени . . . . . . . . . . . . . 367 13.2.7. Реализации протокола SI . . . . . . . . . . . . . . . . . . . . 369 13.2.8. Многоверсионные протоколы . . . . . . . . . . . . . . . . . 370 13.2.9. Блокировки или метки времени? . . . . . . . . . . . . . . . 372 13.3. Ослабленные критерии корректности: уровни изоляции в SQL . 372 13.4. Итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 13.5. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 Глава 14. Надежность баз данных 377 14.1. Восстановление после отказов . . . . . . . . . . . . . . . . . . . . 377 14.2. Отказы сервера баз данных . . . . . . . . . . . . . . . . . . . . . . 378 14.2.1. Журнал транзакций . . . . . . . . . . . . . . . . . . . . . . . 378 14.2.2. Рестарт сервера . . . . . . . . . . . . . . . . . . . . . . . . . 382 14.2.3. Контрольные точки . . . . . . . . . . . . . . . . . . . . . . . 384 8
Оглавление 14.3. Разрушение носителя . . . . . . . . . . . . . . . . . . . . . . . . . . 385 14.3.1. Экспорт и импорт . . . . . . . . . . . . . . . . . . . . . . . . 387 14.3.2. Копирование с восстановлением по журналам . . . . . . . 387 14.3.3. Резервные серверы баз данных . . . . . . . . . . . . . . . . 390 14.4. Итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391 14.5. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391 Глава 15. Дополнительные возможности SQL 393 15.1. Дополнительные средства SQL . . . . . . . . . . . . . . . . . . . . 393 15.1.1. Общие табличные выражения . . . . . . . . . . . . . . . . . 393 15.1.2. Рекурсивные запросы . . . . . . . . . . . . . . . . . . . . . . 397 15.1.3. Аналитические и оконные функции . . . . . . . . . . . . . 401 15.2. Избыточные структуры хранения . . . . . . . . . . . . . . . . . . . 405 15.2.1. Материализованные представления . . . . . . . . . . . . . 405 15.2.2. Индексы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408 15.3. Итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416 15.4. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417 Глава 16. Функции и процедуры в базе данных 419 16.1. Хранимые подпрограммы . . . . . . . . . . . . . . . . . . . . . . . 419 16.2. Процедурный язык PL/pgSQL . . . . . . . . . . . . . . . . . . . . . 426 16.2.1. Структурные конструкции языка PL/pgSQL . . . . . . . . . 427 16.2.2. Работа с объектами базы данных . . . . . . . . . . . . . . . 430 16.2.3. Динамический SQL . . . . . . . . . . . . . . . . . . . . . . . 434 16.2.4. Обработка исключительных ситуаций . . . . . . . . . . . . 436 16.3. Функции и процедуры на языке SQL . . . . . . . . . . . . . . . . . 440 16.4. Итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442 16.5. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442 Глава 17. Расширяемость PostgreSQL 443 17.1. Пользовательские агрегаты . . . . . . . . . . . . . . . . . . . . . . 443 17.2. Типы данных, операторы и классы операторов . . . . . . . . . . . 446 17.3. Индексы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450 17.4. Другие инструменты расширения . . . . . . . . . . . . . . . . . . 452 17.4.1. Модули расширения . . . . . . . . . . . . . . . . . . . . . . 453 17.4.2. Обертки сторонних данных . . . . . . . . . . . . . . . . . . 454 17.4.3. Подключение новых процедурных языков . . . . . . . . . 455 17.5. Итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455 17.6. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456 9
Оглавление Глава 18. Полнотекстовый поиск 457 18.1. Модели информационного поиска . . . . . . . . . . . . . . . . . . 457 18.1.1. Предварительная обработка текста . . . . . . . . . . . . . . 459 18.1.2. Булева модель информационного поиска . . . . . . . . . . 459 18.1.3. Векторные модели информационного поиска . . . . . . . 462 18.2. Средства полнотекстового поиска в PostgreSQL . . . . . . . . . . 465 18.3. Поддержка нечеткого поиска в PostgreSQL . . . . . . . . . . . . . 467 18.3.1. Триграммный поиск . . . . . . . . . . . . . . . . . . . . . . 467 18.3.2. Фонетический поиск . . . . . . . . . . . . . . . . . . . . . . 469 18.4. Итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470 18.5. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 Глава 19. Безопасность данных 473 19.1. Безопасность и разграничение доступа . . . . . . . . . . . . . . . 473 19.2. Основные понятия и модели . . . . . . . . . . . . . . . . . . . . . 474 19.3. Особенности ролей в PostgreSQL . . . . . . . . . . . . . . . . . . . 475 19.4. Привилегии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476 19.5. Права доступа при выполнении хранимых функций . . . . . . . 477 19.6. Разграничение доступа на уровне строк таблиц . . . . . . . . . . 479 19.7. Регистрация событий и изменений . . . . . . . . . . . . . . . . . . 483 19.8. Итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 19.9. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 Глава 20. Администрирование баз данных 487 20.1. Планирование конфигурации сервисов хранения данных . . . . 489 20.2. Безопасность и разграничение доступа . . . . . . . . . . . . . . . 492 20.3. Конфигурация баз данных . . . . . . . . . . . . . . . . . . . . . . . 492 20.4. Мониторинг баз данных . . . . . . . . . . . . . . . . . . . . . . . . 494 20.5. Настройка производительности . . . . . . . . . . . . . . . . . . . . 497 20.5.1. Настройка серверов баз данных . . . . . . . . . . . . . . . . 500 20.5.2. Настройка схемы базы данных . . . . . . . . . . . . . . . . 503 20.5.3. Настройка запросов . . . . . . . . . . . . . . . . . . . . . . . 507 20.5.4. Целостная настройка приложений . . . . . . . . . . . . . . 509 20.6. Надежность и доступность . . . . . . . . . . . . . . . . . . . . . . . 509 20.7. Техническое обслуживание базы данных . . . . . . . . . . . . . . 512 20.8. Итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513 20.9. Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513 Глава 21. Репликация баз данных 515 21.1. Множественные копии данных . . . . . . . . . . . . . . . . . . . . 515 10