Введение ........................ ............. .................... ......................................... 7
Основные понятия ........ ................................. ............................................. 9
База данных и СУБД .............. ........ ............ ........ ....................................... 9
Типы приложений: транзакционная и аналитическая обработка ...................... 11
Клиент-серверные и встроенные СУБД ....................................... ................. 14
Сноска. Firebird 2.5: состояние ............. ............................. ......................... 19
Основные модели данных: иерархическая, сетевая, реляционная ................... 22
Иерархическая модель ........................... ............................. ....... .............. 22
Сетевая модель ...... ............. .................... .................................................. 28
Реляционная модель ........... ........ ............ .................................................. 33
Другие подходы и модели данных ............ ........ .......................................... 37
Модель «Сущность-атрибут-значение» (EAV) ... ............................................ 37
Неполно структурированные модели данных ............................................... .46
Документ-ориентированная модель и NoSQL ................................................ 48
Многомерные модели данных .............. .................................... .................. 53
О применимости NoSQL ........................................................... .................. 56
Множественная и навигационная обработка, менеджеры записей .................. 61
Объектная модель и объектно-реляционная проекция ........ ......................... 65
SQL как универсальный входной язык ........................................ ................ 75
Проектирование ............ ................................. ......................................... 78
Терминология уровней ...................................... ....................................... 78
Первичные и прочие ключи .. .................................................................... 83
Внешние ключи и связи ................. ............ ............................................. 87
Нормализация и денормализация ............. ............................. .................. 89
1НФ .......................................................... .............................................. 90
2НФ ...................................... ................................................................. 91
3НФ .............................................. ............ ........................................... 92
Деморализуем ... то есть денормализуем: «звезда» и «снежинка» .............. 93
Типовая архитектура данных аналитических приложений .......................... 98
Переносимость между СУБД ........ ............................................................ 100
Абстрагирование от СУБД ........ ............ .................................... ............ 101
Абстрагирование от входного языка СУБД ................................................ 102
Использование подмножества входного языка .......................................... 104
Типовые структуры ... ..................... ............ ........ ................................. 104
Моделирование связей разных типов ....................................................... 105
Хронологические данные .. .................... ................................................ 109
Иерархические данные и деревья в SQL ..... ............................................. 115
Интернационализация/локализация данных и проброс контекста ............... 130
Метаданные ........................................................ .................................. 138
Реестр объектов и аудит ................. .................... .................................. 143
Безопасность и доступ к данным .. .......................................................... 145
Проектирование физического хранения .................................................. 151
Физическая организация памяти ............................................................. 152
Оперативная и долговременная память ............................ ...................... 155
Дисковые массивы ..................... ........................................................... 157
Оперативная память ............................... ........ ...................................... 160
Индексация данных ....................................... ........................................ 161
Секционирование данных ......... ............................................................ 163
Неполно структурированные данные и высокая нагрузка .......................... 165
Относительность понятия высокой нагрузки ............................................ 165
Особенности использования РСУБД и НСМД (NoSQL) ................................ 168
Нужно ли моделировать? ........................................................................ 172
Моделирование против ручного кодирования: пример ... .......................... 174
Большие данные как состояние отрасли .................................................. 181
Программирование с испытаниями .......................................................... 187
Типы соединений в SQL на примерах ...................................................... 187
Исходники и синхронизация структур ............. ........................................ 190
Некоторые особенности программирования .............................................. 200
Параметризация запросов и SQL-инъекции ............................................... 200
Сравнение с неопределёнными (пустыми) значениями ............................... 203
Работа со строками .................... .................... ........................................ 204
Работа с датами ...................................................................................... 207
Генерация идентификаторов записей ................................ ...................... 209
Транзакции, изоляция и блокировки ........................................................ 214
Уровни SQL-92 ............................................................ ........................... 215
Блокировки ................................. ............................................................ 219
Взаимные блокировки процессов (deadlock) ............................................... 222
Версии данных ........................... .................... ........................................ 225
Проявления эффектов изоляции ............................................................... 227
Толстые транзакции ................................................................................. 232
Загрузка данных ......................................... ............................................ 233
Пакетная загрузка ....................... ............................................................ 234
Вставка в толстой транзакции .. .................................................... .......... 240
РСУБД и неполно структурированные данные ............................................ 241
Поддержка ХМL ......................... .................... ........................................ 242
Поддержка JSON .................................... ........ ........................................ 250
Выводы .................................................................................................... 253
Постраничные выборки ..... ........................................................................ 254
Обзор способов постраничной выборки ........................................................ 256
Тестирование способов постраничной выборки ............................................ 260
Выводы ........................................ ............................................................ 271
SQL и модульное тестирование .... .................... ........................................ 271
Место модульного тестирования в системе испытаний .. .......................... 271
Особенности разработки на процедурных расширениях SQL .................... 273
Пример задачи для модульного теста ... ........ ........................................ 273
Создаём специализированный макроязык .............................................. 276
Остановиться и оглянуться ................................................................... 283
Производительность SQL-запросов .................................... ................... 284
Общие рекомендации ...................................................................... ..... 284
Анализ плана выполнения запроса ................................... ..................... 286
Поиск узких мест ........................... ....................................................... 291
Основы нагрузочного тестирования ......................................................... 297
Инструменты и методы ......................... ............................................. ... 297
Учёт степени параллелизма ...... ......................................... ................... 301
SQL Server и MongoDB на простом тесте .................................................. 304
Тест вставки записей ................. ............................................................ 304
Запросы и хронометраж ............ ............................................................ 308
Выводы ........................................ .................... ................................... 315
Тестовые и демонстрационные базы данных .. ......................................... 315
Заключение ......................................... .................... ............................ 317
Литература .......................................... ................................................. 318
Книга охватывает различные этапы разработки и сопутствующие им ситуации из практики программистов приложений, работающих с системами управления базами данных. Даются рекомендации по выбору решений как в проектировании (архитектуре), так и в программировании автоматизированных информационных систем уровня предприятия. Приводятся примеры для различных СУБД и моделей: Microsoft SQL Server, PostgreSQL, Firebird, Oracle, XML, NoSQL.Для программистов, студентов и других специалистов в области информационных технологий, а также всех интересующихся темой разработки приложений баз данных.