Опубликовано

Встречайте: “MySQL. Сборник рецептов. 4-е издание”

MySQL. Сборник рецептов. 4-е издание

Рассмотрены готовые рецепты для решения практических задач при работе с СУБД MySQL. Описаны базовые принципы установки соединения с сервером MySQL, получения данных с сервера, выполнения и обработки запросов. Рассказывается о способах сохранять, извлекать и изменять строки, работать с датой и временем, приведены примеры сортировки результатов запросов и создания сводок. Рассматриваются способы оценки характеристик набора данных, создания хранимых функций и процедур. Приведены практические примеры использования хранимых подпрограмм, триггеров и запланированных событий. Отдельное внимание уделено основам мониторинга и приемам администрирования MySQL.

Для программистов, разработчиков и администраторов баз данных

Решения для разработчиков и администраторов

Популярность MySQL неизбежно вызывает вопросы у пользователей: они хотят знать, как решать конкретные задачи, связанные с данными. Вот тут-то и пригодится этот сборник рецептов.

Если вам нужны быстрые решения, в этой книге вы найдете десятки коротких, практичных фрагментов кода, сотни рабочих примеров и четкие, лаконичные объяснения для программистов и администраторов, у которых нет времени разбираться в особенностях MySQL с нуля.

В обновленном четвертом издании книги авторы предлагают более 200 рецептов, раскрывающих мощные возможности MySQL. Начинающие и профессиональные разработчики баз данных и веб-сайтов смогут погрузиться в такие темы, как MySQL Shell, репликация MySQL и работа с JSON.

Вы научитесь:

  • Соединяться с сервером, выполнять запросы и обрабатывать результаты
  • Получать данные с сервера MySQL
  • Сохранять, извлекать и изменять строки
  • Работать с датами и временем
  • Сортировать результаты запросов и создавать сводки
  • Оценивать характеристики набора данных
  • Создавать хранимые функции и процедуры
  • Использовать хранимые подпрограммы, триггеры и запланированные события
  • Выполнять основные задачи по администрированию MySQL
  • Понимать основы мониторинга MySQL

Будь то простые вопросы о соединении с сервером MySQL или сложные проблемы, связанные с выбором правильной топологии репликации, эта книга придет вам на помощь. Света и Алкин делятся своим более чем десятилетним опытом, помогая сотням пользователей MySQL решать ежедневные задачи.
Хенрик Инго, руководитель отдела проектирования и разработки, компания DataStax

Книгу “MySQL. Сборник рецептов. 4-е издание” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Отзывы………………………………………………………………………………………………….. 14

Вступительное слово………………………………………………………………………………. 15

Предисловие…………………………………………………………………………………………… 16

Для кого эта книга……………………………………………………………………………………………………………………… 18

Как построена эта книга…………………………………………………………………………………………………………… 18

Программные интерфейсы для MySQL, используемые в данной книге………………………………… 22

Примечания по версиям и платформам……………………………………………………………………………………. 22

Соглашения, принятые в этой книге…………………………………………………………………………………………. 23

Репозиторий GitHub…………………………………………………………………………………………………………………… 25

Получение MySQL и сопутствующего программного обеспечения……………………………………… 26

Использование примеров кода…………………………………………………………………………………………………. 28

Онлайн-обучение от издательской компании O’Reilly……………………………………………………………. 29

Как с нами связаться………………………………………………………………………………………………………………….. 29

Благодарности…………………………………………………………………………………………………………………………… 30

Глава 1. Работа с клиентской программой mysql……………………………………. 32

1.0. Введение………………………………………………………………………………………………………………………………. 32

1.1. Создание учетной записи пользователя MySQL……………………………………………………………… 33

1.2. Создание базы данных и тестовой таблицы…………………………………………………………………….. 36

1.3. Как найти клиент MySQL…………………………………………………………………………………………………… 37

1.4. Задание параметров команды для mysql………………………………………………………………………….. 39

1.5. Выполнение инструкций SQL в интерактивном режиме…………………………………………………. 44

1.6. Чтение запросов из файла или из программы…………………………………………………………………… 46

1.7. Управление направлением и форматом вывода mysql…………………………………………………….. 48

1.8. Использование в SQL-запросах переменных, определяемых пользователем……………….. 53

1.9. Настройка приглашения на ввод в mysql………………………………………………………………………….. 56

1.10. Использование внешних программ…………………………………………………………………………………. 58

1.11. Фильтрация и обработка вывода…………………………………………………………………………………….. 59

Глава 2. Работа с MySQL Shell……………………………………………………………….. 63

2.0. Введение………………………………………………………………………………………………………………………………. 63

2.1. Соединение с сервером MySQL при помощи MySQL Shell……………………………………………… 64

2.2. Выбор протокола………………………………………………………………………………………………………………… 67

2.3. Выбор режимов SQL, JavaScript или Python…………………………………………………………………….. 70

2.4. Выполнение сессий SQL…………………………………………………………………………………………………….. 70

2.5. Выполнение запросов SQL в режиме JavaScript………………………………………………………………. 71

2.6. Выполнение запросов SQL в режиме Python……………………………………………………………………. 74

2.7. Работа с таблицами в режиме JavaScript………………………………………………………………………….. 76

2.8. Работа с таблицами в режиме Python……………………………………………………………………………….. 78

2.9. Работа с коллекциями в режиме JavaScript………………………………………………………………………. 81

2.10. Работа с коллекциями в режиме Python………………………………………………………………………….. 84

2.11. Управление форматом вывода………………………………………………………………………………………… 86

2.12. Формирование отчетов с помощью MySQL Shell…………………………………………………………… 90

2.13. Работа с утилитами MySQL Shell……………………………………………………………………………………. 93

2.14. Использование Admin API для автоматизации управления репликацией…………………… 96

2.15. Работа с объектами JavaScript…………………………………………………………………………………………. 98

2.16. Заполнение базы данных тестовыми данными с помощью модулей Python
для Data Science………………………………………………………………………………………………………………. 102

2.17. Повторное использование сценариев для MySQL Shell………………………………………………. 112

Глава 3. Репликация MySQL………………………………………………………………… 115

3.0. Введение…………………………………………………………………………………………………………………………….. 115

3.1. Настройка базовой репликации между одним источником и одной репликой…………… 117

3.2. Репликация на основе позиции в новой среде………………………………………………………………… 118

3.3. Настройка репликации на основе позиции в активной среде………………………………………. 119

3.4. Настройка репликации на основе GTID…………………………………………………………………………. 121

3.5. Настройка формата бинарного журнала……………………………………………………………………….. 125

3.6. Использование фильтров репликации…………………………………………………………………………….. 126

3.7. Перезапись базы данных на реплике………………………………………………………………………………. 132

3.8. Параллельное выполнение событий (многопоточная реплика)…………………………………… 133

3.9. Настройка кольцевой репликации………………………………………………………………………………….. 135

3.10. Репликация из нескольких источников…………………………………………………………………………. 137

3.11. Использование подключаемого модуля полусинхронной репликации…………………….. 141

3.12. Использование групповой репликации…………………………………………………………………………. 144

3.13. Безопасное хранение учетных данных репликации……………………………………………………. 149

3.14. Использование TLS (SSL) для репликации…………………………………………………………………… 150

3.15. Устранение неполадок при репликации……………………………………………………………………….. 152

3.16. Использование списка процессов для понимания производительности
репликации………………………………………………………………………………………………………………………. 166

3.17. Настройка автоматической репликации………………………………………………………………………. 171

Глава 4. Создание программ для MySQL……………………………………………… 178

4.0. Введение…………………………………………………………………………………………………………………………….. 178

4.1. Соединение с сервером MySQL, выбор базы данных и отключение…………………………… 182

4.2. Обработка ошибок……………………………………………………………………………………………………………. 196

4.3. Создание библиотечных файлов…………………………………………………………………………………….. 205

4.4. Выполнение запросов и извлечение результатов………………………………………………………….. 219

4.5. Использование в запросах специальных символов и значений NULL…………………………. 234

4.6. Обработка специальных символов в идентификаторах……………………………………………….. 242

4.7. Обработка значений NULL в результирующих множествах………………………………………… 244

4.8. Способы получения параметров соединения………………………………………………………………… 250

4.9. Возвращение таблицы profile в исходное состояние…………………………………………………….. 259

Глава 5. Выбор записей………………………………………………………………………… 261

5.0. Введение…………………………………………………………………………………………………………………………….. 261

5.1. Задание столбцов и строк вывода…………………………………………………………………………………… 262

5.2. Присваивание имен столбцам вывода…………………………………………………………………………….. 264

5.3. Упорядочивание результирующего множества…………………………………………………………….. 268

5.4. Удаление повторяющихся строк……………………………………………………………………………………… 269

5.5. Обработка значений NULL………………………………………………………………………………………………. 270

5.6. Использование в программах операций сравнения с участием NULL…………………………. 273

5.7. Использование представлений для упрощения доступа к таблицам…………………………… 274

5.8. Выбор данных из нескольких таблиц……………………………………………………………………………… 275

5.9. Выбор строк из начала, конца или середины результирующего множества……………… 277

5.10. Что делать, если для LIMIT нужен “неправильный” порядок сортировки…………………. 280

5.11. Получение значений LIMIT из выражений……………………………………………………………………. 281

5.12. Объединение двух или более результатов SELECT…………………………………………………….. 282

5.13. Получение результатов подзапросов……………………………………………………………………………. 284

Глава 6. Управление таблицами…………………………………………………………… 286

6.0. Введение…………………………………………………………………………………………………………………………….. 286

6.1. Клонирование таблицы……………………………………………………………………………………………………. 286

6.2. Выбор результирующего множества в существующую таблицу………………………………… 287

6.3. Создание временных таблиц……………………………………………………………………………………………. 290

6.4. Формирование уникальных имен таблиц……………………………………………………………………….. 292

6.5. Проверка или изменение механизма хранения данных для таблиц…………………………….. 293

6.6. Копирование таблиц с использованием утилиты mysqldump……………………………………….. 294

6.7. Копирование таблицы InnoDB с использованием переносимых
табличных пространств……………………………………………………………………………………………………. 297

6.8. Копирование таблицы MyISAM с помощью файла sdi…………………………………………………. 299

Глава 7. Работа со строками…………………………………………………………………. 301

7.0. Введение…………………………………………………………………………………………………………………………….. 301

7.1. Свойства строк………………………………………………………………………………………………………………….. 301

7.2. Выбор типа строковых данных……………………………………………………………………………………….. 306

7.3. Настройка набора символов для обмена данными с клиентской программой…………… 308

7.4. Создание строковых литералов………………………………………………………………………………………. 311

7.5. Проверка или изменение набора символов или порядка расстановки символов для строки         314

7.6. Преобразование регистра букв строки…………………………………………………………………………… 316

7.7. Сравнение строковых значений………………………………………………………………………………………. 318

7.8. Преобразование между десятичным, восьмеричным и шестнадцатеричным форматами 321

7.9. Преобразование между ASCII, BIT и шестнадцатеричным форматами……………………… 322

7.10. Поиск по образцу с помощью шаблонов SQL………………………………………………………………. 325

7.11. Поиск по образцу с помощью регулярных выражений……………………………………………….. 328

7.12. Инвертирование строк……………………………………………………………………………………………………. 333

7.13. Проверка вхождения подстроки в строку…………………………………………………………………….. 334

7.14. Разбиение и объединение строк…………………………………………………………………………………….. 335

7.15. Поиск с помощью индекса FULLTEXT…………………………………………………………………………… 338

7.16. FULLTEXT-поиск и короткие слова……………………………………………………………………………….. 344

7.17. Включение и исключение слов из FULLTEXT-поиска………………………………………………….. 346

7.18. Поиск фразы при помощи индекса FULLTEXT……………………………………………………………… 347

Глава 8. Работа с датами и временем……………………………………………………. 349

8.0. Введение…………………………………………………………………………………………………………………………….. 349

8.1. Выбор временных типов данных…………………………………………………………………………………….. 350

8.2. Представление секунд в виде дроби……………………………………………………………………………….. 352

8.3. Изменение формата даты MySQL……………………………………………………………………………………. 355

8.4. Установка часового пояса клиента…………………………………………………………………………………. 358

8.5. Установка часового пояса сервера…………………………………………………………………………………. 360

8.6. Смещение временных значений при изменении часового пояса………………………………….. 362

8.7. Определение текущей даты или времени……………………………………………………………………….. 363

8.8. Использование TIMESTAMP или DATETIME для отслеживания времени изменения записей        364

8.9. Разбиение дат и времени на части…………………………………………………………………………………… 367

8.10. Синтез дат и времени с помощью функций извлечения составляющих…………………….. 372

8.11. Преобразование времени в более простые единицы и обратно…………………………………. 374

8.12. Вычисление интервалов между датами или значениями времени…………………………….. 378

8.13. Добавление значений даты или времени……………………………………………………………………… 382

8.14. Вычисление возраста……………………………………………………………………………………………………… 388

8.15. Нахождение первого и последнего дней месяца или длительности месяца……………… 389

8.16. Определение дня недели для даты………………………………………………………………………………… 392

8.17. Определение дат для дней текущей недели………………………………………………………………….. 392

8.18. Стандартизация не-совсем-ISO-строк…………………………………………………………………………… 395

8.19. Выбор записей по временным характеристикам…………………………………………………………. 397

Глава 9. Сортировка результатов запроса…………………………………………….. 401

9.0. Введение…………………………………………………………………………………………………………………………….. 401

9.1. Использование ORDER BY для сортировки результатов запроса………………………………… 402

9.2. Сортировка результатов выражения………………………………………………………………………………. 405

9.3. Сортировка одного набора значений и вывод другого…………………………………………………. 407

9.4. Сортировка и чувствительность к регистру…………………………………………………………………… 411

9.5. Сортировка в хронологическом порядке………………………………………………………………………… 414

9.6. Сортировка по подстрокам значений столбцов…………………………………………………………….. 418

9.7. Сортировка по подстрокам фиксированной длины………………………………………………………. 419

9.8. Сортировка по подстрокам переменной длины…………………………………………………………….. 422

9.9. Сортировка имен хостов по доменам……………………………………………………………………………… 426

9.10. Сортировка IP-адресов в числовом порядке………………………………………………………………… 429

9.11. Размещение некоторых значений в начале или в конце упорядоченного списка…….. 431

9.12. Сортировка в порядке, определенном пользователем………………………………………………… 434

9.13. Сортировка значений ENUM…………………………………………………………………………………………. 435

Глава 10. Формирование итогов…………………………………………………………… 439

10.0. Введение………………………………………………………………………………………………………………………….. 439

10.1. Суммирование с помощью функции COUNT()……………………………………………………………… 441

10.2. Суммирование при помощи функций MIN() и MAX()…………………………………………………… 443

10.3. Суммирование при помощи функций SUM() и AVG()…………………………………………………… 444

10.4. Использование ключевого слова DISTINCT для удаления дубликатов…………………….. 446

10.5. Создание представления для упрощения работы с итоговыми данными…………………. 448

10.6. Поиск значений, связанных с минимальным и максимальным значениями………………. 449

10.7. Управление чувствительностью к регистру функций MIN() и MAX()…………………………. 451

10.8. Разбиение итогов на подгруппы……………………………………………………………………………………. 453

10.9. Обработка значений NULL с помощью агрегирующих функций……………………………….. 457

10.10. Выбор групп только с определенными характеристиками………………………………………. 460

10.11. Устанавливаем уникальность значения……………………………………………………………………… 461

10.12. Группировка по результатам выражения…………………………………………………………………… 462

10.13. Классификация некатегориальных данных……………………………………………………………….. 463

10.14. Нахождение наибольшего и наименьшего из итоговых значений…………………………… 466

10.15. Итоги по датам……………………………………………………………………………………………………………… 468

10.16. Одновременная работа с итогами по группам и общим итогом………………………………. 470

10.17. Формирование отчета, содержащего итоговую информацию и список………………….. 473

10.18. Формирование итогов из временных результирующих множеств…………………………… 476

Глава 11. Использование хранимых подпрограмм, триггеров и запланированных событий      478

11.0. Введение………………………………………………………………………………………………………………………….. 478

11.1. Создание объектов с составными инструкциями…………………………………………………………. 480

11.2. Использование хранимых функций для упрощения вычислений………………………………. 482

11.3. Использование хранимых процедур для получения нескольких значений………………. 484

11.4. Использование триггеров для регистрации изменений в таблице……………………………… 486

11.5. Планирование действий в базе данных с помощью событий…………………………………….. 489

11.6. Разработка вспомогательных подпрограмм для выполнения
динамических запросов………………………………………………………………………………………………….. 491

11.7. Обнаружение ситуаций “no more rows” с помощью обработчиков
особых ситуаций…………………………………………………………………………………………………………….. 493

11.8. Перехват и игнорирование ошибок с помощью обработчиков особых ситуаций……. 494

11.9. Генерация ошибок и предупреждений………………………………………………………………………….. 495

11.10. Регистрация ошибок путем доступа к диагностической области……………………………. 497

11.11. Использование триггеров для предварительной обработки или отклонения данных 501

Глава 12. Работа с метаданными………………………………………………………….. 504

12.0. Введение………………………………………………………………………………………………………………………….. 504

12.1. Определение числа строк, обработанных запросом…………………………………………………… 505

12.2. Получение метаданных результирующего множества……………………………………………….. 509

12.3. Вывод списков таблиц и баз данных или проверка их существования…………………….. 519

12.4. Вывод списков представлений или проверка их существования……………………………….. 520

12.5. Получение определений столбцов таблицы………………………………………………………………… 521

12.6. Получение информации о столбцах ENUM и SET……………………………………………………….. 526

12.7. Получение метаданных сервера……………………………………………………………………………………. 528

12.8. Создание приложений, адаптирующихся к версии сервера MySQL…………………………. 529

12.9. Обнаружение дочерних таблиц, которые ссылаются на определенную таблицу через ограничения внешнего ключа………………………………………………………………………………………………………………………………………….. 531

12.10. Получение списка триггеров……………………………………………………………………………………….. 533

12.11. Получение списка хранимых подпрограмм и запланированных событий…………….. 534

12.12. Получение списка подключаемых модулей………………………………………………………………. 536

12.13. Получение списка наборов символов и порядков расстановки……………………………….. 537

12.14. Получение списка ограничений CHECK…………………………………………………………………….. 541

Глава 13. Импорт и экспорт данных…………………………………………………….. 542

13.0. Введение………………………………………………………………………………………………………………………….. 542

13.1. Импорт с помощью LOAD DATA и утилиты mysqlimport……………………………………………… 545

13.2. Указание разделителей полей и строк………………………………………………………………………….. 549

13.3. Использование кавычек и специальных символов………………………………………………………. 551

13.4. Обработка дубликатов индексированных записей……………………………………………………… 552

13.5. Диагностика при ошибках во входных данных…………………………………………………………… 553

13.6. Пропуск строк в файле данных……………………………………………………………………………………… 555

13.7. Определение порядка ввода столбцов………………………………………………………………………….. 555

13.8. Предварительная обработка входных значений, помещаемых в базу данных………… 556

13.9. Пропуск столбцов файла данных………………………………………………………………………………….. 558

13.10. Импорт файлов в формате CSV……………………………………………………………………………………. 559

13.11. Экспорт результатов запроса из MySQL……………………………………………………………………. 560

13.12. Импорт и экспорт значений NULL……………………………………………………………………………….. 562

13.13. Экспорт данных в SQL-формат……………………………………………………………………………………. 564

13.14. Импорт данных SQL……………………………………………………………………………………………………… 565

13.15. Экспорт результатов запроса в XML………………………………………………………………………….. 566

13.16. Импорт XML в MySQL…………………………………………………………………………………………………. 568

13.17. Импорт данных в формате JSON…………………………………………………………………………………. 569

13.18. Импорт данных из MongoDB……………………………………………………………………………………….. 571

13.19. Экспорт данных в формате JSON………………………………………………………………………………… 572

13.20. Разработка структуры таблицы на основе файла данных……………………………………….. 573

Глава 14. Проверка и изменение формата данных……………………………….. 576

14.0. Введение………………………………………………………………………………………………………………………….. 576

14.1. Использование режима SQL для отклонения неверных входных значений……………… 577

14.2. Использование ограничений CHECK для отклонения недопустимых значений………. 579

14.3. Использование триггеров для отклонения входных значений……………………………………. 581

14.4. Создание цикла обработки ввода…………………………………………………………………………………. 583

14.5. Размещение часто выполняемых проверок в библиотеке…………………………………………… 584

14.6. Проверка корректности. Сравнение с образцом………………………………………………………….. 586

14.7. Образцы для широкой классификации…………………………………………………………………………. 589

14.8. Образцы для числовых значений………………………………………………………………………………….. 589

14.9. Образцы для дат и времени……………………………………………………………………………………………. 591

14.10. Образцы для адресов электронной почты и URL………………………………………………………. 594

14.11. Проверка корректности при помощи метаданных таблицы…………………………………….. 595

14.12. Проверка корректности при помощи справочной таблицы……………………………………… 599

14.13. Преобразование двузначных значений года в четырехзначные……………………………… 601

14.14. Проверка корректности составляющих даты и времени…………………………………………… 603

14.15. Создание утилит для обработки дат…………………………………………………………………………… 605

14.16. Импорт не-ISO значений дат……………………………………………………………………………………….. 609

14.17. Экспорт не-ISO значений дат………………………………………………………………………………………. 611

14.18. Предварительная обработка и импорт файла……………………………………………………………. 612

Глава 15. Формирование и использование последовательностей…………. 614

15.0. Введение………………………………………………………………………………………………………………………….. 614

15.1. Создание последовательности со столбцами AUTO_INCREMENT……………………………. 615

15.2. Выбор типа для столбца последовательности…………………………………………………………….. 618

15.3. Удаление записей и формирование последовательности…………………………………………… 620

15.4. Извлечение значений последовательности………………………………………………………………….. 622

15.5. Перенумерация существующей последовательности…………………………………………………. 626

15.6. Расширение диапазона последовательности………………………………………………………………. 628

15.7. Повторное использование последних значений последовательности………………………. 629

15.8. Управление изменением нумерации строк…………………………………………………………………… 630

15.9. Добавление последовательности в существующую таблицу…………………………………….. 631

15.10. Управление несколькими столбцами AUTO_INCREMENT одновременно………………. 632

15.11. Использование значений AUTO_INCREMENT для связывания таблиц……………………. 633

15.12. Генераторы однострочных последовательностей……………………………………………………. 636

15.13. Формирование повторяющихся последовательностей…………………………………………….. 639

15.14. Использование произвольных значений приращения………………………………………………. 640

15.15. Использование оконных функций для нумерации строк в результирующем множестве……….. 643

15.16. Генерация последовательностей с помощью рекурсивных обобщенных табличных выражений          644

15.17. Создание и хранение нестандартных последовательностей…………………………………… 647

Глава 16. Использование соединений и подзапросов……………………………. 654

16.0. Введение………………………………………………………………………………………………………………………….. 654

16.1. Нахождение строк одной таблицы, соответствующих строкам другой……………………. 655

16.2. Нахождение строк, которым не соответствуют никакие строки другой таблицы……. 663

16.3. Выявление и удаление несвязанных записей……………………………………………………………….. 668

16.4. Сравнение таблицы с самой собой……………………………………………………………………………….. 671

16.5. Вывод списков для записей “главная-подчиненная” и итогов……………………………………. 675

16.6. Отношение “многие-ко-многим”…………………………………………………………………………………….. 679

16.7. Нахождение строк с минимальным и максимальным значением в группе……………….. 683

16.8. Заполнение или обнаружение пустых мест в списке с помощью соединений………….. 686

16.9. Управление порядком вывода запроса с помощью соединения………………………………… 689

16.10. Объединение результатов нескольких запросов……………………………………………………….. 691

16.11. Обращение в программах к именам столбцов вывода, полученных при соединении таблиц   693

Глава 17. Статистические методы………………………………………………………… 695

17.0. Введение………………………………………………………………………………………………………………………….. 695

17.1. Получение описательных статистических показателей…………………………………………….. 695

17.2. Групповые статистические показатели………………………………………………………………………… 699

17.3. Получение частотного распределения…………………………………………………………………………. 701

17.4. Подсчет отсутствующих значений……………………………………………………………………………….. 704

17.5. Вычисление линейной регрессии и коэффициентов корреляции……………………………….. 706

17.6. Генерация случайных чисел………………………………………………………………………………………….. 709

17.7. Рандомизация набора строк………………………………………………………………………………………….. 710

17.8. Случайный выбор из набора строк………………………………………………………………………………. 713

17.9. Вычисление разности между последовательными строками…………………………………….. 715

17.10. Нарастающий итог и скользящее среднее………………………………………………………………….. 717

17.11. Присваивание рангов……………………………………………………………………………………………………. 721

17.12. Вычисление рейтинга команд……………………………………………………………………………………… 725

Глава 18. Обработка повторяющихся записей……………………………………… 731

18.0. Введение………………………………………………………………………………………………………………………….. 731

18.1. Предотвращение появления дубликатов в таблице…………………………………………………….. 732

18.2. Несколько уникальных ключей в таблице……………………………………………………………………. 734

18.3. Обработка дубликатов на этапе создания записи………………………………………………………. 735

18.4. Подсчет и выявление дубликатов………………………………………………………………………………….. 740

18.5. Удаление дубликатов из таблицы…………………………………………………………………………………. 743

Глава 19. Работа с JSON………………………………………………………………………. 748

19.0. Введение………………………………………………………………………………………………………………………….. 748

19.1. Выбор правильного типа данных…………………………………………………………………………………. 749

19.2. Вставка значений JSON………………………………………………………………………………………………….. 749

19.3. Проверка соответствия стандарту JSON………………………………………………………………………. 750

19.4. Форматирование значений JSON…………………………………………………………………………………… 754

19.5. Извлечение значений из документа JSON…………………………………………………………………….. 755

19.6. Поиск в документах JSON………………………………………………………………………………………………. 757

19.7. Вставка новых элементов в документ JSON…………………………………………………………………. 758

19.8. Обновление значений JSON……………………………………………………………………………………………. 760

19.9. Удаление элементов из документа JSON………………………………………………………………………. 761

19.10. Объединение нескольких документов JSON в один…………………………………………………… 761

19.11. Преобразование реляционных данных в формат JSON…………………………………………….. 765

19.12. Преобразование формата JSON в реляционный формат…………………………………………… 768

19.13. Исследование структуры данных JSON……………………………………………………………………… 770

19.14. Работа с JSON в MySQL как с хранилищем документов…………………………………………… 772

Глава 20. Выполнение транзакций………………………………………………………. 780

20.0. Введение………………………………………………………………………………………………………………………….. 780

20.1. Выбор механизма хранения, который поддерживает транзакции…………………………….. 781

20.2. Выполнение транзакций средствами SQL……………………………………………………………………. 782

20.3. Выполнение транзакций в программах………………………………………………………………………… 784

20.4. Использование транзакций в программах на Perl………………………………………………………… 786

20.5. Использование транзакций в программах на Ruby…………………………………………………….. 787

20.6. Использование транзакций в программах на PHP………………………………………………………. 788

20.7. Использование транзакций в программах на Python………………………………………………….. 789

20.8. Использование транзакций в программах на Go…………………………………………………………. 790

20.9. Обработка транзакций в Go с помощью функций, использующих контекст…………….. 791

20.10. Использование транзакций в программах на Java……………………………………………………. 794

Глава 21. Производительность запросов………………………………………………. 796

21.0. Введение………………………………………………………………………………………………………………………….. 796

21.1. Создание индексов………………………………………………………………………………………………………….. 797

21.2. Суррогатный первичный ключ……………………………………………………………………………………… 799

21.3. Поддержание индексов…………………………………………………………………………………………………… 801

21.4. Как принять решение об использовании индекса в запросе……………………………………….. 803

21.5. Определение порядка для составных индексов…………………………………………………………… 804

21.6. Использование возрастающих и убывающих индексов……………………………………………… 806

21.7. Использование функциональных индексов………………………………………………………………….. 809

21.8. Использование индексов в вычисляемых столбцах…………………………………………………….. 811

21.9. Поиск с помощью полнотекстового индекса………………………………………………………………… 814

21.10. Использование пространственных индексов и географических данных………………… 816

21.11. Создание и использование гистограмм………………………………………………………………………. 820

21.12. Написание высокопроизводительных запросов………………………………………………………… 827

Глава 22. Администрирование сервера…………………………………………………. 833

22.0. Введение………………………………………………………………………………………………………………………….. 833

22.1. Конфигурирование сервера…………………………………………………………………………………………… 833

22.2. Управление интерфейсом подключаемых модулей…………………………………………………….. 836

22.3. Управление журналированием сервера……………………………………………………………………….. 838

22.4. Ротация и установка срока действия файлов журналов……………………………………………… 841

22.5. Ротация таблиц журналов или строк таблицы журналов, у которых истекает
срок хранения………………………………………………………………………………………………………………….. 844

22.6. Конфигурирование механизмов хранения данных……………………………………………………… 845

Глава 23. Мониторинг сервера MySQL…………………………………………………. 848

23.0. Введение………………………………………………………………………………………………………………………….. 848

23.1. Зачем выполнять мониторинг сервера MySQL?………………………………………………………….. 849

23.2. Поиск источников информации для мониторинга MySQL………………………………………….. 855

23.3. Проверка времени доступности сервера………………………………………………………………………. 859

23.4. Устранение проблем с запуском сервера……………………………………………………………………… 860

23.5. Определение нагрзуки на систему ввода-вывода сервера MySQL…………………………….. 861

23.6. Определение загрузки процессора потоками MySQL…………………………………………………. 864

23.7. Лимиты соединений MySQL………………………………………………………………………………………….. 867

23.8. Проверка надлежащего размера буферного пула……………………………………………………….. 868

23.9. Поиск информации о механизме хранения данных…………………………………………………….. 871

23.10. Использование журнала ошибок для устранения сбоев в работе сервера MySQL.. 874

23.11. Журнал медленных запросов………………………………………………………………………………………. 876

23.12. Мониторинг с помощью общего журнала запросов…………………………………………………. 878

23.13. Использование бинарного журнала для выявления изменений……………………………….. 880

Глава 24. Безопасность………………………………………………………………………… 882

24.0. Введение………………………………………………………………………………………………………………………….. 882

24.1. Основные сведения о таблице mysql.user……………………………………………………………………… 882

24.2. Управление учетными записями пользователей………………………………………………………….. 883

24.3. Внедрение политики паролей………………………………………………………………………………………… 887

24.4. Проверка надежности пароля……………………………………………………………………………………….. 889

24.5. Истечение срока действия паролей………………………………………………………………………………. 889

24.6. Установка нового пароля для собственной учетной записи………………………………………. 891

24.7. Переустановка пароля при истечении срока его действия…………………………………………. 891

24.8. Обнаружение и удаление анонимных учетных записей…………………………………………….. 892

24.9. Изменение учетных записей “Any Host” и “Many Host”………………………………………………. 893

24.10. Использование TLS (SSL)…………………………………………………………………………………………….. 894

24.11. Использование ролей……………………………………………………………………………………………………. 898

24.12. Использование представлений для обеспечения безопасности при доступе к таблицам          899

24.13. Использование хранимых процедур для безопасной модификации данных………….. 902

Предметный указатель…………………………………………………………………………. 905

Об авторах……………………………………………………………………………………………. 910

Об изображении на обложке………………………………………………………………… 911

Cмирнова Cвета

Света Смирнова — ведущий специалист службы технической поддержки в компании Percona. Среди главных сфер ее профессиональной деятельности — решение проблем и обучение эффективной работе с MySQL, помощь в устранении ошибок и преодолении подводных камней этой СУБД.

 

 

Alkin Tezuysal

Алкин Тезуйсал — вице-президент по глобальным сервисам компании ChistaDATA. Имеет большой опыт работы с реляционными базами данных с открытым исходным кодом.

Опубликовано

Новинка: “Основы проектирования баз данных. 2-е издание”

Основы проектирования баз данных. 2-е издание

Книга о проектировании и поддержке широкого спектра реляционных и нереляционных баз данных на любой аппаратной платформе и в кроссплатформенных окружениях. Описано, как развёртывать и использовать базы данных на корпоративных серверах и в облаке. Изложены базовые принципы масштабирования, репликации, обеспечения согласованности данных, надёжности и безопасности облачных, корпоративных и гибридных решений. Для прочтения книги не требуются знания конкретных баз данных, книга может применяться как для проектирования базы данных с нуля, так и для доработки унаследованного продукта.

Для разработчиков, администраторов, специалистов по поддержке баз данных

Перед вами обновлённое второе издание классической книги о концепциях различных баз данных и подходах к их внедрению. Прославленный опытный программист и преподаватель Род Стивенс в доступной  форме рассказывает об устройстве и реализации традиционных и инновационных решений для работы с большими данными. Книга снабжена обширными примерами рабочего протестированного кода, подсказывающего элегантные решения для всевозможных прикладных задач и разнообразных окружений.

Вы изучите, как лучше всего проектировать надёжные и безопасные базы данных безотносительно той платформы, на которой предполагается работать. Рассказано, как встраивать в систему  возможности масштабирования, репликации данных, как добиваться согласованности, надёжности, простоты, гибкости и безопасности новой или унаследованной базы данных.

Книга предназначена для архитекторов и разработчиков баз данных, стремящихся найти универсальное пособие по проектированию и реализации БД в сети предприятия или в облаке. Также книга будет полезна администраторам баз данных и специалистам по управлению данными, особенно при необходимости работать в гибридных средах.

Книга не требует знаний или опыта работы с какой-либо конкретной базой данных, предлагает ясную и полную информацию по следующим темам:

  • Цели и движущие факторы эффективного проектирования баз данных
  • Основы устройства реляционных баз данных
  • Важность трактовки любой базы данных с точки зрения пользователя, понимание его потребностей
  • Эффективное моделирование данных
  • Понимание бизнес-правил и умение их конкретизировать

Книгу “Основы проектирования баз данных. 2-е издание” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Краткое оглавление…………………………………………………………………………………. 5

Об авторе……………………………………………………………………………………………….. 27

О техническом редакторе английского издания…………………………………….. 28

Благодарности……………………………………………………………………………………….. 28

Предисловие…………………………………………………………………………………………… 29

Для кого эта книга?……………………………………………………………………………………………………………………. 30

О чем рассказывается в книге?…………………………………………………………………………………………………. 30

Что вам потребуется для работы с книгой?…………………………………………………………………………….. 31

Структура книги………………………………………………………………………………………………………………………… 31

Часть I. Введение в базы данных и их проектирование……………………………………………… 32

Часть II. Процесс и методы проектирования баз данных…………………………………………… 32

Часть III. Подробный анализ конкретного примера…………………………………………………… 34

Часть IV. Примеры программ………………………………………………………………………………………… 34

Часть V. Расширенные темы………………………………………………………………………………………….. 35

Приложения…………………………………………………………………………………………………………………….. 36

Как работать с книгой?……………………………………………………………………………………………………………… 36

Примечание для преподавателей…………………………………………………………………………………………….. 38

Примечание для студентов……………………………………………………………………………………………………….. 39

Условные обозначения……………………………………………………………………………………………………………… 39

Исходный код…………………………………………………………………………………………………………………………….. 40

Как связаться с автором?………………………………………………………………………………………………………….. 40

Пояснение…………………………………………………………………………………………………………………………………… 40

ЧАСТЬ I. Введение в базы данных и их проектирование….. 41

Глава 1. Цели проектирования баз данных……………………………………………. 43

Важность проектирования………………………………………………………………………………………………………… 44

Информационные контейнеры………………………………………………………………………………………………….. 46

Достоинства и недостатки информационных контейнеров…………………………………………………… 48

Желательные функции базы данных……………………………………………………………………………………….. 51

CRUD……………………………………………………………………………………………………………………………….. 51

Извлечение………………………………………………………………………………………………………………. 52

Согласованность……………………………………………………………………………………………………. 52

Валидность……………………………………………………………………………………………………………… 53

Простое исправление ошибок……………………………………………………………………………….. 54

Скорость………………………………………………………………………………………………………………….. 55

Атомарные транзакции………………………………………………………………………………………….. 55

ACID………………………………………………………………………………………………………………………………… 56

BASE………………………………………………………………………………………………………………………………… 58

NewSQL……………………………………………………………………………………………………………………………. 59

Постоянство и резервное копирование…………………………………………………………………………. 59

Низкая стоимость и расширяемость……………………………………………………………………………… 61

Простота использования……………………………………………………………………………………………….. 62

Переносимость………………………………………………………………………………………………………………… 62

Безопасность…………………………………………………………………………………………………………………… 63

Совместное использование……………………………………………………………………………………………. 64

Способность выполнять сложные расчеты………………………………………………………………….. 65

Теорема CAP…………………………………………………………………………………………………………………… 65

Несколько мыслей про облачные технологии…………………………………………………………….. 66

Правовые аспекты и вопросы безопасности………………………………………………………………… 67

Последствия качественного и некачественного проектирования………………………………. 69

Резюме…………………………………………………………………………………………………………………………………………. 71

Упражнения………………………………………………………………………………………………………………………….. 71

Глава 2. Обзор реляционных баз данных……………………………………………….. 73

Выбор базы данных…………………………………………………………………………………………………………………… 74

Точки зрения на реляционные базы данных…………………………………………………………………………… 75

Таблица, строки и столбцы………………………………………………………………………………………………………. 76

Отношения, атрибуты и кортежи……………………………………………………………………………………………… 78

Ключи…………………………………………………………………………………………………………………………………………. 79

Индексы………………………………………………………………………………………………………………………………………. 82

Ограничения……………………………………………………………………………………………………………………………….. 82

Доменные ограничения………………………………………………………………………………………………….. 82

Проверочные ограничения…………………………………………………………………………………………….. 83

Ограничения первичного ключа……………………………………………………………………………………. 83

Ограничение уникальности…………………………………………………………………………………………… 84

Ограничения внешних ключей………………………………………………………………………………………. 84

Операции с базами данных………………………………………………………………………………………………………. 86

Популярные реляционные базы данных…………………………………………………………………………………. 88

Электронные таблицы………………………………………………………………………………………………………………. 90

Резюме…………………………………………………………………………………………………………………………………………. 91

Упражнения………………………………………………………………………………………………………………………….. 91

Глава 3. Обзор NoSQL……………………………………………………………………………. 94

Облачная среда………………………………………………………………………………………………………………………….. 94

Выбор базы данных…………………………………………………………………………………………………………………… 97

Философия NoSQL………………………………………………………………………………………………………….. 97

Базы данных NoSQL………………………………………………………………………………………………………. 98

Документные базы данных……………………………………………………………………………………. 98

База данных ключей и значений………………………………………………………………………… 100

Столбцово-ориентированные базы данных………………………………………………………. 100

Графовые базы данных……………………………………………………………………………………….. 102

Уличные сети………………………………………………………………………………………………….. 102

Сети связи………………………………………………………………………………………………………… 103

Приложения для социальных сетей………………………………………………………………. 103

Программы электронной коммерции……………………………………………………………. 104

Алгоритмы………………………………………………………………………………………………………. 104

Иерархические базы данных………………………………………………………………………………. 104

Менее экзотические варианты……………………………………………………………………………………………….. 108

Неструктурированные файлы…………………………………………………………………………………….. 108

XML-файлы…………………………………………………………………………………………………………………… 109

Основы XML…………………………………………………………………………………………………………. 110

Практика работы с XML……………………………………………………………………………………… 114

Выводы об XML…………………………………………………………………………………………………… 116

JSON-файлы…………………………………………………………………………………………………………………… 117

Электронные таблицы…………………………………………………………………………………………………. 119

Более экзотические варианты………………………………………………………………………………………………… 120

Объектные……………………………………………………………………………………………………………………… 120

Дедуктивные…………………………………………………………………………………………………………………. 120

Размерные……………………………………………………………………………………………………………………… 121

Временне…………………………………………………………………………………………………………………….. 121

Плюсы и минусы баз данных………………………………………………………………………………………………….. 122

Реляционные…………………………………………………………………………………………………………………. 123

Общие свойства баз данных NoSQL…………………………………………………………………………… 124

Краткие рекомендации………………………………………………………………………………………………… 126

Резюме………………………………………………………………………………………………………………………………………. 128

Упражнения………………………………………………………………………………………………………………………… 129

ЧАСТЬ II. Процесс и методы проектирования баз данных 131

Глава 4. Понимание потребностей пользователей………………………………… 133

Составьте план………………………………………………………………………………………………………………………… 134

Возьмите с собой список вопросов………………………………………………………………………………………… 135

Функциональные возможности…………………………………………………………………………………… 135

Потребности в данных…………………………………………………………………………………………………. 136

Целостность данных…………………………………………………………………………………………………….. 136

Безопасность…………………………………………………………………………………………………………………. 137

Окружение…………………………………………………………………………………………………………………….. 138

Встретьтесь с клиентами…………………………………………………………………………………………………………. 139

Узнайте, кто есть кто……………………………………………………………………………………………………………….. 140

Определите участников……………………………………………………………………………………………….. 143

Как это сделать?…………………………………………………………………………………………………… 143

Постарайтесь понять, как мыслят клиенты…………………………………………………………………………… 144

Представьте себя на месте клиентов……………………………………………………………………………………… 144

Изучите текущие операции…………………………………………………………………………………………………….. 145

Устройте мозговой штурм………………………………………………………………………………………………………. 146

Думайте о будущем…………………………………………………………………………………………………………………. 147

Поймите логику клиентов……………………………………………………………………………………………………….. 147

Узнайте, что на самом деле нужно клиентам……………………………………………………………………….. 149

Расставьте приоритеты…………………………………………………………………………………………………………… 150

Проверьте свое понимание……………………………………………………………………………………………………… 151

Составьте техническое задание……………………………………………………………………………………………… 153

Подготовьте сценарии использования…………………………………………………………………………………… 154

Примите решение о целесообразности………………………………………………………………………………….. 158

Резюме………………………………………………………………………………………………………………………………………. 159

Упражнения………………………………………………………………………………………………………………………… 160

Глава 5. Перевод потребностей пользователей в модели данных………….. 163

Что такое модели данных?……………………………………………………………………………………………………… 164

Модели пользовательского интерфейса………………………………………………………………………………… 167

Построение модели пользовательского интерфейса…………………………………………………. 170

Как это сделать?…………………………………………………………………………………………………… 171

Семантические объектные модели…………………………………………………………………………………………. 172

Классы и объекты…………………………………………………………………………………………………………. 172

Кардинальность……………………………………………………………………………………………………………. 173

Идентификаторы…………………………………………………………………………………………………………… 174

Соберем все вместе………………………………………………………………………………………………………. 174

Построение семантической объектной модели…………………………………………………………. 176

Как это сделать?…………………………………………………………………………………………………… 176

Семантические представления……………………………………………………………………………………. 176

Типы классов………………………………………………………………………………………………………………… 178

Простые объекты………………………………………………………………………………………………….. 178

Композитные объекты…………………………………………………………………………………………. 178

Составные объекты……………………………………………………………………………………………… 179

Гибридный объект……………………………………………………………………………………………….. 179

Ассоциативные объекты……………………………………………………………………………………… 180

Хитроумные ассоциации…………………………………………………………………………………….. 182

Как это сделать?…………………………………………………………………………………………….. 182

Наследуемые объекты…………………………………………………………………………………………. 182

Комментарии и примечания………………………………………………………………………………………… 184

Модели «сущность-связь»……………………………………………………………………………………………………….. 185

Сущности, атрибуты и идентификаторы……………………………………………………………………. 185

Связи………………………………………………………………………………………………………………………………. 186

Кардинальность……………………………………………………………………………………………………………. 187

Наследование……………………………………………………………………………………………………………….. 189

Построение ER-диаграммы…………………………………………………………………………………………. 190

Как это сделать?…………………………………………………………………………………………………… 190

Дополнительные условные обозначения…………………………………………………………………… 191

Комментарии и примечания………………………………………………………………………………………… 192

Реляционные модели……………………………………………………………………………………………………………….. 193

Преобразование семантических объектных моделей……………………………………………….. 193

Преобразование ER-диаграмм……………………………………………………………………………………. 196

Резюме………………………………………………………………………………………………………………………………………. 197

Упражнения………………………………………………………………………………………………………………………… 198

Глава 6. Извлечение бизнес-правил……………………………………………………… 200

Что такое бизнес-правила?……………………………………………………………………………………………………… 200

Определение ключевых бизнес-правил…………………………………………………………………………………. 202

Поиск бизнес-правил……………………………………………………………………………………………………. 206

Как это сделать?…………………………………………………………………………………………………… 207

Извлечение ключевых бизнес-правил……………………………………………………………………………………. 209

Многоуровневые приложения………………………………………………………………………………………………… 211

Пример реализации многоуровневого приложения………………………………………………….. 214

Как это сделать?…………………………………………………………………………………………………… 214

Резюме………………………………………………………………………………………………………………………………………. 217

Упражнения………………………………………………………………………………………………………………………… 217

Глава 7. Нормализация данных……………………………………………………………. 221

Что такое нормализация?……………………………………………………………………………………………………….. 221

Первая нормальная форма (1НФ)…………………………………………………………………………………………… 223

Организация данных в первой нормальной форме……………………………………………………. 226

Как это сделать?…………………………………………………………………………………………………… 227

Вторая нормальная форма (2НФ)………………………………………………………………………………………….. 232

Организация данных во второй нормальной форме…………………………………………………. 235

Как это сделать?…………………………………………………………………………………………………… 235

Третья нормальная форма (3НФ)…………………………………………………………………………………………… 236

Организация данных в третьей нормальной форме………………………………………………….. 238

Как это сделать?…………………………………………………………………………………………………… 239

Остановка на третьей нормальной форме………………………………………………………………….. 240

Нормальная форма Бойса — Кодда (НФБК)………………………………………………………………………… 241

Организация данных в НФБК……………………………………………………………………………………… 244

Как это сделать?…………………………………………………………………………………………………… 244

Четвертая нормальная форма (4НФ)……………………………………………………………………………………… 245

Организация данных в четвертой нормальной форме………………………………………………. 248

Как это сделать?…………………………………………………………………………………………………… 248

Пятая нормальная форма (5НФ)…………………………………………………………………………………………….. 250

Работа с пятой нормальной формой…………………………………………………………………………… 252

Как это сделать?…………………………………………………………………………………………………… 252

Доменно-ключевая нормальная форма (ДКНФ)…………………………………………………………………… 253

Организация данных в доменно-ключевой нормальной форме……………………………….. 254

Как это сделать?…………………………………………………………………………………………………… 255

Ценная избыточность………………………………………………………………………………………………………………. 255

Оптимальный уровень нормализации……………………………………………………………………………………. 257

Нормализация NoSQL……………………………………………………………………………………………………………… 258

Резюме………………………………………………………………………………………………………………………………………. 259

Упражнения………………………………………………………………………………………………………………………… 260

Глава 8. Проектирование баз данных для поддержки
программного обеспечения…………………………………………………………………… 263

Планируйте наперед……………………………………………………………………………………………………………….. 264

Документируйте всё………………………………………………………………………………………………………………… 264

Учитывайте многоуровневую архитектуру………………………………………………………………………….. 265

Преобразуйте домены в таблицы…………………………………………………………………………………………… 265

Использование справочных таблиц……………………………………………………………………………. 266

Как это сделать?…………………………………………………………………………………………………… 267

Следите, чтобы таблицы оставались специализированными…………………………………………….. 267

Используйте три вида таблиц…………………………………………………………………………………………………. 267

Четко специализированные таблицы…………………………………………………………………………. 268

Как это сделать?…………………………………………………………………………………………………… 269

Придерживайтесь соглашений об именовании…………………………………………………………………….. 270

Допускайте определенную избыточность данных………………………………………………………………. 271

Не втискивайте всё подряд……………………………………………………………………………………………………… 272

Первая нормальная форма…………………………………………………………………………………………… 273

Как это сделать?…………………………………………………………………………………………………… 273

Резюме………………………………………………………………………………………………………………………………………. 273

Упражнения………………………………………………………………………………………………………………………… 274

Глава 9. Использование общих шаблонов проектирования…………………. 276

Ассоциации………………………………………………………………………………………………………………………………. 277

Ассоциации «многие ко многим»…………………………………………………………………………………. 277

Множественные ассоциации «многие ко многим»…………………………………………………….. 277

Построение связей «многие-ко-многим»…………………………………………………………….. 278

Как это сделать?…………………………………………………………………………………………….. 279

Многообъектные ассоциации……………………………………………………………………………………… 279

Построение многообъектных ассоциаций…………………………………………………………. 281

Как это сделать?…………………………………………………………………………………………….. 281

Повторяющиеся ассоциации атрибутов…………………………………………………………………….. 282

Рефлексивные ассоциации…………………………………………………………………………………………… 284

Рефлексивные ассоциации «один к одному»……………………………………………………… 284

Рефлексивные ассоциации «один ко многим»……………………………………………………. 285

Иерархические данные……………………………………………………………………………………………………………. 286

Работа с иерархическими данными……………………………………………………………………………. 287

Как это сделать?…………………………………………………………………………………………………… 288

Иерархические данные с NoSQL…………………………………………………………………………………. 289

Сетевые данные……………………………………………………………………………………………………………………….. 290

Сетевые данные с NoSQL…………………………………………………………………………………………….. 292

Временные данные………………………………………………………………………………………………………………….. 293

Срок действия……………………………………………………………………………………………………………….. 293

Удаленные объекты……………………………………………………………………………………………………… 294

Решаем, какие данные сделать временными……………………………………………………………… 295

Протоколирование и блокировка…………………………………………………………………………………………… 297

Журналы контроля………………………………………………………………………………………………………. 297

Записи под ключ…………………………………………………………………………………………………………… 298

Резюме………………………………………………………………………………………………………………………………………. 299

Упражнения………………………………………………………………………………………………………………………… 300

Глава 10. Предотвращение распространенных ошибок проектирования 302

Низкий уровень подготовки……………………………………………………………………………………………………. 302

Некачественная документация………………………………………………………………………………………………. 303

Неудачные стандарты именования……………………………………………………………………………………….. 303

Недостаточно масштабное мышление………………………………………………………………………………….. 305

Неумение предусматривать изменения…………………………………………………………………………………. 307

Чрезмерная нормализация………………………………………………………………………………………………………. 310

Недостаточная нормализация……………………………………………………………………………………………….. 310

Недостаточно тщательное тестирование……………………………………………………………………………… 311

Тревога из-за производительности………………………………………………………………………………………… 312

Разносортные таблицы……………………………………………………………………………………………………………. 312

Несоблюдение ограничений…………………………………………………………………………………………………… 315

Одержимость идентификацией……………………………………………………………………………………………….. 315

Отмененные идентификаторы……………………………………………………………………………………… 316

Как это сделать?…………………………………………………………………………………………………… 317

Отсутствие заданных естественных ключей…………………………………………………………………………. 319

Резюме………………………………………………………………………………………………………………………………………. 320

Упражнения………………………………………………………………………………………………………………………… 320

ЧАСТЬ III. Подробный анализ конкретного примера………. 323

Глава 11. Определение потребностей и требований пользователей………. 325

Встретьтесь с клиентами…………………………………………………………………………………………………………. 325

Мыслите как заказчики…………………………………………………………………………………………………………… 327

Определите, что должна делать система…………………………………………………………………… 328

Определите, как должен выглядеть проект………………………………………………………………… 330

Выясните, какие данные необходимы для пользовательского интерфейса……………. 331

Определите источник данных……………………………………………………………………………………… 332

Определите взаимосвязи между частями данных……………………………………………………… 333

Где искать данные?……………………………………………………………………………………………… 334

Как это сделать?…………………………………………………………………………………………….. 334

Определите потребности в производительности………………………………………………………. 335

Определите потребности в безопасности…………………………………………………………………… 336

Определите потребности в целостности данных………………………………………………………. 336

Инвентаризация……………………………………………………………………………………………………. 338

Как это сделать?…………………………………………………………………………………………….. 338

Напишите сценарии использования………………………………………………………………………………………. 339

Пример описания для сценария использования………………………………………………… 341

Как это сделать?…………………………………………………………………………………………….. 342

Составьте техническое задание……………………………………………………………………………………………… 343

Затребуйте обратную связь……………………………………………………………………………………………………. 344

Резюме………………………………………………………………………………………………………………………………………. 345

Упражнения………………………………………………………………………………………………………………………… 346

Глава 12. Построение модели данных………………………………………………….. 347

Построение семантических объектных моделей………………………………………………………………….. 347

Построение исходной семантической объектной модели………………………………………… 348

Пример определения класса……………………………………………………………………………….. 349

Как это сделать?…………………………………………………………………………………………….. 349

Совершенствование семантической объектной модели…………………………………………… 350

Моделирование сущностей и связей……………………………………………………………………………………… 353

Построение ER-диаграммы…………………………………………………………………………………………. 353

Сущность Course имеет значение……………………………………………………………………….. 354

Как это сделать?…………………………………………………………………………………………….. 354

Построение комбинированной ER-диаграммы………………………………………………………….. 355

Усовершенствование диаграммы «сущность-связь»…………………………………………………. 356

Разрываем связи……………………………………………………………………………………………………. 357

Как это сделать?…………………………………………………………………………………………….. 358

Построение реляционной модели…………………………………………………………………………………………… 359

Идентификация идентификаторов………………………………………………………………………………. 361

Как это сделать?…………………………………………………………………………………………………… 361

Объединим все вместе……………………………………………………………………………………………………………… 362

Резюме………………………………………………………………………………………………………………………………………. 363

Упражнения………………………………………………………………………………………………………………………… 364

Глава 13. Извлечение бизнес-правил……………………………………………………. 366

Определение бизнес-правил……………………………………………………………………………………………………. 366

Таблица Courses……………………………………………………………………………………………………………. 367

Ограничения адресов…………………………………………………………………………………………… 369

Как это сделать?…………………………………………………………………………………………….. 369

Таблица CustomerCourses……………………………………………………………………………………………. 370

Таблица Customers……………………………………………………………………………………………………….. 370

Таблица Pets………………………………………………………………………………………………………………….. 370

Таблица Employees………………………………………………………………………………………………………. 371

Таблица Orders……………………………………………………………………………………………………………… 371

Таблица OrderItems………………………………………………………………………………………………………. 371

Таблица InventoryItems……………………………………………………………………………………………….. 372

Таблица TimeEntries…………………………………………………………………………………………………….. 372

Таблица Shifts……………………………………………………………………………………………………………….. 373

Таблица Persons……………………………………………………………………………………………………………. 373

Таблица Phones…………………………………………………………………………………………………………….. 373

Таблица Vendors…………………………………………………………………………………………………………… 374

Построение новой реляционной модели……………………………………………………………………………….. 374

Резюме………………………………………………………………………………………………………………………………………. 375

Упражнения………………………………………………………………………………………………………………………… 375

Глава 14. Нормализация и уточнение…………………………………………………… 377

Повышение гибкости……………………………………………………………………………………………………………….. 377

Проверка первой нормальной формы……………………………………………………………………………………. 379

Приведение к первой нормальной форме…………………………………………………………………… 381

Как это сделать?…………………………………………………………………………………………………… 382

Проверка второй нормальной формы……………………………………………………………………………………. 383

Таблица Pets………………………………………………………………………………………………………………….. 383

Таблица OrderItems………………………………………………………………………………………………………. 384

Как это сделать?…………………………………………………………………………………………………… 384

Таблица TimeEntries…………………………………………………………………………………………………….. 385

Проверка третьей нормальной формы…………………………………………………………………………………… 386

Резюме………………………………………………………………………………………………………………………………………. 388

Упражнения………………………………………………………………………………………………………………………… 389

ЧАСТЬ IV. Примеры программ……………………………………………………. 391

Глава 15. Обзор примеров…………………………………………………………………….. 393

Выбор инструментов……………………………………………………………………………………………………………….. 393

Jupyter Notebook………………………………………………………………………………………………………………………. 395

Visual Studio……………………………………………………………………………………………………………………………… 397

Адаптеры баз данных……………………………………………………………………………………………………………… 398

Пакеты в Jupyter Notebook…………………………………………………………………………………………… 399

Пакеты в Visual Studio………………………………………………………………………………………………….. 401

Пароли программ…………………………………………………………………………………………………………………….. 403

Резюме………………………………………………………………………………………………………………………………………. 404

Упражнения………………………………………………………………………………………………………………………… 404

Глава 16. MariaDB на Python………………………………………………………………… 405

Установите MariaDB……………………………………………………………………………………………………………….. 406

Запустите HeidiSQL…………………………………………………………………………………………………………………. 407

Напишите программу……………………………………………………………………………………………………………… 410

Установите модуль pymysql………………………………………………………………………………………… 410

Создайте базу данных…………………………………………………………………………………………………. 410

Определите таблицы……………………………………………………………………………………………………. 413

Добавьте данные………………………………………………………………………………………………………….. 415

Получите данные………………………………………………………………………………………………………….. 417

Резюме………………………………………………………………………………………………………………………………………. 419

Упражнения………………………………………………………………………………………………………………………… 420

Глава 17. MariaDB на C#……………………………………………………………………… 421

Напишите программу……………………………………………………………………………………………………………… 421

Установите MySqlConnector……………………………………………………………………………………….. 422

Создайте базу данных…………………………………………………………………………………………………. 423

Определите таблицы……………………………………………………………………………………………………. 425

Создайте данные………………………………………………………………………………………………………….. 427

Получите данные………………………………………………………………………………………………………….. 431

Резюме………………………………………………………………………………………………………………………………………. 433

Упражнения………………………………………………………………………………………………………………………… 433

Глава 18. PostgreSQL на Python……………………………………………………………. 435

Установите PostgreSQL……………………………………………………………………………………………………………. 436

Запустите pgAdmin………………………………………………………………………………………………………………….. 437

Спроектируйте базу данных……………………………………………………………………………………….. 437

Создайте пользователя………………………………………………………………………………………………… 437

Создайте базу данных…………………………………………………………………………………………………. 439

Определите таблицы……………………………………………………………………………………………………. 440

Определите таблицу customers……………………………………………………………………………. 440

Определите таблицу orders…………………………………………………………………………………. 443

Определите таблицу order_items………………………………………………………………………… 444

Напишите программу……………………………………………………………………………………………………………… 445

Установите Psycopg……………………………………………………………………………………………………… 445

Подключитесь к базе данных………………………………………………………………………………………. 446

Удалите старые данные………………………………………………………………………………………………. 446

Создайте данные о клиентах………………………………………………………………………………………. 447

Создайте данные заказа………………………………………………………………………………………………. 448

Создайте данные элементов заказа……………………………………………………………………………. 450

Закройте соединение……………………………………………………………………………………………………. 451

Выполните запросы……………………………………………………………………………………………………… 451

Резюме………………………………………………………………………………………………………………………………………. 453

Упражнения………………………………………………………………………………………………………………………… 454

Глава 19. PostgreSQL на C#………………………………………………………………….. 456

Напишите программу……………………………………………………………………………………………………………… 456

Установите Npgsql………………………………………………………………………………………………………… 456

Подключитесь к базе данных………………………………………………………………………………………. 457

Удалите старые данные………………………………………………………………………………………………. 458

Создайте данные о клиентах………………………………………………………………………………………. 459

Создайте данные заказа………………………………………………………………………………………………. 460

Создайте данные позиций заказа……………………………………………………………………………….. 462

Отобразите заказы……………………………………………………………………………………………………….. 464

Резюме………………………………………………………………………………………………………………………………………. 467

Упражнения………………………………………………………………………………………………………………………… 467

Глава 20. Neo4j auraDB на Python………………………………………………………… 470

Установите neo4j auraDB……………………………………………………………………………………………………….. 471

Узлы и связи……………………………………………………………………………………………………………………………… 473

Cypher……………………………………………………………………………………………………………………………………….. 473

Напишите программу……………………………………………………………………………………………………………… 474

Установите адаптер базы данных Neo4j……………………………………………………………………. 474

Методы действий………………………………………………………………………………………………………….. 475

Метод delete_all_nodes……………………………………………………………………………………….. 475

Метод make_node…………………………………………………………………………………………………. 476

Метод make_link…………………………………………………………………………………………………… 477

Метод execute_node_query………………………………………………………………………………….. 477

Метод find_path……………………………………………………………………………………………………. 478

Методы схемы организации………………………………………………………………………………………… 479

Метод build_org_chart………………………………………………………………………………………… 479

Метод query_org_chart………………………………………………………………………………………… 480

Основная программа……………………………………………………………………………………………………. 481

Резюме………………………………………………………………………………………………………………………………………. 483

Упражнения………………………………………………………………………………………………………………………… 484

Глава 21. Neo4j auraDB на C#………………………………………………………………. 486

Напишите программу……………………………………………………………………………………………………………… 487

Установите драйвер Neo4j…………………………………………………………………………………………… 487

Методы действий………………………………………………………………………………………………………….. 488

Метод DeleteAllNodes………………………………………………………………………………………….. 489

Метод MakeNode………………………………………………………………………………………………….. 489

Метод MakeLink……………………………………………………………………………………………………. 490

Метод ExecuteNodeQuery…………………………………………………………………………………….. 491

Метод FindPath……………………………………………………………………………………………………. 492

Методы схемы организации………………………………………………………………………………………… 493

Метод BuildOrgChart…………………………………………………………………………………………… 493

Метод QueryOrgChart………………………………………………………………………………………….. 494

Основная программа……………………………………………………………………………………………………. 495

Резюме………………………………………………………………………………………………………………………………………. 497

Упражнения………………………………………………………………………………………………………………………… 498

Глава 22. MongoDB Atlas на Python………………………………………………………. 499

Не нормальная, но и не аномальная………………………………………………………………………………………. 499

XML, JSON и BSON………………………………………………………………………………………………………………….. 500

Установите MongoDB Atlas…………………………………………………………………………………………………….. 502

Найдите код подключения……………………………………………………………………………………………………… 504

Напишите программу……………………………………………………………………………………………………………… 507

Установите адаптер базы данных PyMongo……………………………………………………………… 507

Вспомогательные методы……………………………………………………………………………………………. 508

Метод person_string…………………………………………………………………………………………….. 508

Метод connect_to_db…………………………………………………………………………………………… 509

Метод delete_old_data…………………………………………………………………………………………. 510

Метод create_data………………………………………………………………………………………………… 510

Метод query_data…………………………………………………………………………………………………. 512

Основная программа……………………………………………………………………………………………………. 518

Резюме………………………………………………………………………………………………………………………………………. 518

Упражнения………………………………………………………………………………………………………………………… 519

Глава 23. MongoDB Atlas на C#…………………………………………………………….. 521

Напишите программу……………………………………………………………………………………………………………… 522

Установите адаптер базы данных MongoDB…………………………………………………………….. 522

Вспомогательные методы……………………………………………………………………………………………. 522

Метод PersonString………………………………………………………………………………………………. 523

Метод DeleteOldData…………………………………………………………………………………………… 524

Метод CreateData………………………………………………………………………………………………… 525

Метод QueryData………………………………………………………………………………………………….. 527

Основная программа……………………………………………………………………………………………………. 531

Резюме………………………………………………………………………………………………………………………………………. 534

Упражнения………………………………………………………………………………………………………………………… 534

Глава 24. Apache Ignite на Python…………………………………………………………. 536

Установите Apache Ignite………………………………………………………………………………………………………… 537

Запустите узел…………………………………………………………………………………………………………………………. 537

Без сохранения……………………………………………………………………………………………………………… 538

С сохранением………………………………………………………………………………………………………………. 539

Напишите программу……………………………………………………………………………………………………………… 540

Установите адаптер базы данных pyignite………………………………………………………………… 540

Определите класс Building………………………………………………………………………………………….. 540

Сохраните данные……………………………………………………………………………………………………….. 541

Считайте данные………………………………………………………………………………………………………….. 542

Продемонстрируйте энергозависимые данные…………………………………………………………. 543

Продемонстрируйте энергонезависмые данные……………………………………………………….. 543

Резюме………………………………………………………………………………………………………………………………………. 544

Упражнения………………………………………………………………………………………………………………………… 544

Глава 25. Apache Ignite на C#……………………………………………………………….. 546

Напишите программу……………………………………………………………………………………………………………… 547

Установите адаптер базы данных Ignite……………………………………………………………………. 547

Метод main программы……………………………………………………………………………………………….. 548

Класс Building………………………………………………………………………………………………………………. 549

Метод WriteData…………………………………………………………………………………………………………… 549

Метод ReadData……………………………………………………………………………………………………………. 551

Продемонстрируйте энергозависимые данные…………………………………………………………. 552

Продемонстрируйте энергонезависимые данные……………………………………………………… 553

Резюме………………………………………………………………………………………………………………………………………. 553

Упражнения………………………………………………………………………………………………………………………… 554

ЧАСТЬ V. Темы для углубленного изучения………………………. 555

Глава 26. Введение в SQL…………………………………………………………………….. 557

История…………………………………………………………………………………………………………………………………….. 559

Поиск дополнительной информации……………………………………………………………………………………… 559

Стандарты………………………………………………………………………………………………………………………………… 560

Составные команды………………………………………………………………………………………………………………… 561

Базовый синтаксис…………………………………………………………………………………………………………………… 563

Обзор команд……………………………………………………………………………………………………………………………. 564

Оператор CREATE TABLE……………………………………………………………………………………………………….. 567

Постройте таблицу………………………………………………………………………………………………………. 569

Как это сделать?…………………………………………………………………………………………………… 570

Оператор CREATE INDEX……………………………………………………………………………………………………….. 572

Оператор DROP……………………………………………………………………………………………………………………….. 573

Оператор INSERT…………………………………………………………………………………………………………………….. 573

Оператор SELECT……………………………………………………………………………………………………………………. 575

Выражение SELECT……………………………………………………………………………………………………… 575

Выражение FROM………………………………………………………………………………………………………… 576

Выражение WHERE………………………………………………………………………………………………………. 580

Выражение GROUP BY…………………………………………………………………………………………………. 580

Выражение ORDER BY…………………………………………………………………………………………………. 580

Сделайте свой выбор…………………………………………………………………………………………… 581

Как это сделать?…………………………………………………………………………………………….. 581

Оператор UPDATE…………………………………………………………………………………………………………………… 582

Пробуем обновления на вкус………………………………………………………………………………………. 583

Как это сделать?…………………………………………………………………………………………………… 583

Оператор DELETE……………………………………………………………………………………………………………………. 584

Резюме………………………………………………………………………………………………………………………………………. 584

Упражнения………………………………………………………………………………………………………………………… 584

Глава 27. Создание баз данных с помощью сценариев SQL…………………. 588

Зачем тратить время на сценарии?………………………………………………………………………………………… 588

Категории сценариев………………………………………………………………………………………………………………. 589

Сценарии создания базы данных……………………………………………………………………………….. 589

Основные сценарии инициализации…………………………………………………………………………… 589

Сценарии инициализации данных……………………………………………………………………………… 589

Сценарии очистки………………………………………………………………………………………………………… 590

Сохраняйте сценарии……………………………………………………………………………………………………………… 590

Упорядочивание команд SQL…………………………………………………………………………………………………. 591

Упорядочьте таблицы………………………………………………………………………………………………….. 594

Как это сделать?…………………………………………………………………………………………………… 594

Резюме………………………………………………………………………………………………………………………………………. 600

Упражнения………………………………………………………………………………………………………………………… 601

Глава 28. Обслуживание базы данных…………………………………………………. 602

Резервное копирование……………………………………………………………………………………………………………. 603

Составьте план резервного копирования…………………………………………………………………… 605

Как это сделать?…………………………………………………………………………………………………… 605

Хранение данных…………………………………………………………………………………………………………………….. 607

Восстановление базы данных………………………………………………………………………………………………… 607

Уплотнение базы данных……………………………………………………………………………………………………….. 608

Управление производительностью………………………………………………………………………………………… 608

Ключи к успеху…………………………………………………………………………………………………………….. 610

Как это сделать?…………………………………………………………………………………………………… 610

Резюме………………………………………………………………………………………………………………………………………. 612

Упражнения………………………………………………………………………………………………………………………… 613

Глава 29. Безопасность баз данных……………………………………………………… 614

Необходимый уровень безопасности…………………………………………………………………………………….. 614

Пароли………………………………………………………………………………………………………………………………………. 615

Базы данных с единым паролем…………………………………………………………………………………. 615

Индивидуальные пароли……………………………………………………………………………………………… 616

Пароли операционной системы………………………………………………………………………………….. 616

Надежные пароли………………………………………………………………………………………………………… 616

Привилегии……………………………………………………………………………………………………………………………….. 618

Минимум привилегированных……………………………………………………………………………………. 622

Как это сделать?…………………………………………………………………………………………………… 623

Исходная конфигурация и привилегии………………………………………………………………………………….. 623

Чрезмерная безопасность……………………………………………………………………………………………………….. 624

Физическая безопасность……………………………………………………………………………………………………….. 625

Резюме………………………………………………………………………………………………………………………………………. 627

Упражнения………………………………………………………………………………………………………………………… 627

ПРИЛОЖЕНИЯ…………………………………………………………………………………… 629

Приложение 1. Ответы к упражнениям………………………………………………… 631

Глава 1. Цели проектирования баз данных…………………………………………………………………………… 631

Упражнение 1……………………………………………………………………………………………………………….. 631

Упражнение 2……………………………………………………………………………………………………………….. 633

Упражнение 3……………………………………………………………………………………………………………….. 633

Упражнение 4……………………………………………………………………………………………………………….. 633

Упражнение 5……………………………………………………………………………………………………………….. 635

Упражнение 6……………………………………………………………………………………………………………….. 636

Упражнение 7……………………………………………………………………………………………………………….. 636

Упражнение 8……………………………………………………………………………………………………………….. 637

Упражнение 9……………………………………………………………………………………………………………….. 637

Упражнение 10……………………………………………………………………………………………………………… 638

Глава 2. Обзор реляционных баз данных……………………………………………………………………………… 638

Упражнение 1……………………………………………………………………………………………………………….. 638

Упражнение 2……………………………………………………………………………………………………………….. 638

Упражнение 3……………………………………………………………………………………………………………….. 638

Упражнение 4……………………………………………………………………………………………………………….. 639

Упражнение 5……………………………………………………………………………………………………………….. 639

Упражнение 6……………………………………………………………………………………………………………….. 639

Упражнение 7……………………………………………………………………………………………………………….. 639

Упражнение 8……………………………………………………………………………………………………………….. 640

Упражнение 9……………………………………………………………………………………………………………….. 640

Упражнение 10……………………………………………………………………………………………………………… 640

Глава 3. Обзор NOSQL…………………………………………………………………………………………………………….. 640

Упражнение 1……………………………………………………………………………………………………………….. 640

Упражнение 2……………………………………………………………………………………………………………….. 641

Упражнение 3……………………………………………………………………………………………………………….. 641

Упражнение 4……………………………………………………………………………………………………………….. 642

Упражнение 5……………………………………………………………………………………………………………….. 642

Упражнение 6……………………………………………………………………………………………………………….. 642

Упражнение 7……………………………………………………………………………………………………………….. 642

Упражнение 8……………………………………………………………………………………………………………….. 642

Упражнение 9……………………………………………………………………………………………………………….. 642

Упражнение 10……………………………………………………………………………………………………………… 643

Упражнение 11……………………………………………………………………………………………………………… 643

Упражнение 12……………………………………………………………………………………………………………… 643

Упражнение 13……………………………………………………………………………………………………………… 644

Упражнение 14……………………………………………………………………………………………………………… 644

Глава 4. Понимание потребностей пользователей………………………………………………………………. 645

Упражнение 1……………………………………………………………………………………………………………….. 645

Упражнение 2……………………………………………………………………………………………………………….. 645

Упражнение 3……………………………………………………………………………………………………………….. 646

Упражнение 4……………………………………………………………………………………………………………….. 646

Упражнение 5……………………………………………………………………………………………………………….. 646

Упражнение 6……………………………………………………………………………………………………………….. 646

Упражнение 7……………………………………………………………………………………………………………….. 647

Упражнение 8……………………………………………………………………………………………………………….. 647

Упражнение 9……………………………………………………………………………………………………………….. 648

Упражнение 10……………………………………………………………………………………………………………… 648

Упражнение 11……………………………………………………………………………………………………………… 650

Глава 5. Перевод потребностей пользователей в модели данных……………………………………… 650

Упражнение 1……………………………………………………………………………………………………………….. 650

Упражнение 2……………………………………………………………………………………………………………….. 650

Упражнение 3……………………………………………………………………………………………………………….. 653

Упражнение 4……………………………………………………………………………………………………………….. 654

Упражнение 5……………………………………………………………………………………………………………….. 655

Упражнение 6……………………………………………………………………………………………………………….. 656

Упражнение 7……………………………………………………………………………………………………………….. 657

Упражнение 8……………………………………………………………………………………………………………….. 657

Глава 6. Извлечение бизнес-правил……………………………………………………………………………………….. 658

Упражнение 1……………………………………………………………………………………………………………….. 658

Упражнение 2……………………………………………………………………………………………………………….. 661

Упражнение 3……………………………………………………………………………………………………………….. 663

Упражнение 4……………………………………………………………………………………………………………….. 664

Глава 7. Нормализация данных…………………………………………………………………………………………….. 665

Упражнение 1……………………………………………………………………………………………………………….. 665

Упражнение 2……………………………………………………………………………………………………………….. 667

Упражнение 3……………………………………………………………………………………………………………….. 667

Упражнение 4……………………………………………………………………………………………………………….. 668

Упражнение 5……………………………………………………………………………………………………………….. 669

Упражнение 6……………………………………………………………………………………………………………….. 669

Глава 8. Проектирование баз данных для поддержки программного обеспечения………….. 670

Упражнение 1……………………………………………………………………………………………………………….. 670

Упражнение 2……………………………………………………………………………………………………………….. 671

Упражнение 3……………………………………………………………………………………………………………….. 671

Упражнение 4……………………………………………………………………………………………………………….. 671

Глава 9. Использование общих шаблонов проектирования……………………………………………….. 672

Упражнение 1……………………………………………………………………………………………………………….. 672

Упражнение 2……………………………………………………………………………………………………………….. 672

Упражнение 3……………………………………………………………………………………………………………….. 672

Упражнение 4……………………………………………………………………………………………………………….. 673

Упражнение 5……………………………………………………………………………………………………………….. 673

Упражнение 6……………………………………………………………………………………………………………….. 674

Упражнение 7……………………………………………………………………………………………………………….. 675

Упражнение 8……………………………………………………………………………………………………………….. 675

Упражнение 9……………………………………………………………………………………………………………….. 676

Глава 10. Предотвращение распространенных ошибок проектирования…………………………. 676

Упражнение 1……………………………………………………………………………………………………………….. 676

Упражнение 2……………………………………………………………………………………………………………….. 677

Упражнение 3……………………………………………………………………………………………………………….. 677

Упражнение 4……………………………………………………………………………………………………………….. 678

Глава 11. Определение потребностей и требований пользователей………………………………….. 679

Упражнение 1……………………………………………………………………………………………………………….. 679

Упражнение 2……………………………………………………………………………………………………………….. 680

Упражнение 3……………………………………………………………………………………………………………….. 680

Упражнение 4……………………………………………………………………………………………………………….. 681

Упражнение 5……………………………………………………………………………………………………………….. 682

Упражнение 6……………………………………………………………………………………………………………….. 682

Глава 12. Построение модели данных…………………………………………………………………………………… 683

Упражнение 1……………………………………………………………………………………………………………….. 683

Упражнение 2……………………………………………………………………………………………………………….. 683

Упражнение 3……………………………………………………………………………………………………………….. 683

Упражнение 4……………………………………………………………………………………………………………….. 684

Упражнение 5……………………………………………………………………………………………………………….. 684

Упражнение 6……………………………………………………………………………………………………………….. 684

Упражнение 7……………………………………………………………………………………………………………….. 684

Упражнение 8……………………………………………………………………………………………………………….. 685

Упражнение 9……………………………………………………………………………………………………………….. 685

Упражнение 10……………………………………………………………………………………………………………… 685

Упражнение 11……………………………………………………………………………………………………………… 685

Упражнение 12……………………………………………………………………………………………………………… 686

Глава 13. Извлечение бизнес-правил…………………………………………………………………………………….. 686

Упражнение 1……………………………………………………………………………………………………………….. 686

Упражнение 2……………………………………………………………………………………………………………….. 687

Упражнение 3……………………………………………………………………………………………………………….. 687

Упражнение 4……………………………………………………………………………………………………………….. 688

Упражнение 5……………………………………………………………………………………………………………….. 689

Глава 14. Нормализация и уточнение…………………………………………………………………………………… 689

Упражнение 1……………………………………………………………………………………………………………….. 689

Упражнение 2……………………………………………………………………………………………………………….. 690

Упражнение 3……………………………………………………………………………………………………………….. 691

Упражнение 4……………………………………………………………………………………………………………….. 691

Глава 15. Обзор примеров………………………………………………………………………………………………………. 692

Упражнение 1……………………………………………………………………………………………………………….. 692

Упражнение 2……………………………………………………………………………………………………………….. 692

Упражнение 3……………………………………………………………………………………………………………….. 693

Упражнение 4……………………………………………………………………………………………………………….. 693

Упражнение 5……………………………………………………………………………………………………………….. 693

Упражнение 6……………………………………………………………………………………………………………….. 694

Глава 16. MariaDB на Python…………………………………………………………………………………………………. 694

Упражнение 1……………………………………………………………………………………………………………….. 694

Упражнение 2……………………………………………………………………………………………………………….. 694

Упражнение 3……………………………………………………………………………………………………………….. 694

Упражнение 4……………………………………………………………………………………………………………….. 694

Упражнение 5……………………………………………………………………………………………………………….. 695

Упражнение 6……………………………………………………………………………………………………………….. 696

Глава 17. MariaDB на C#………………………………………………………………………………………………………… 696

Упражнение 1……………………………………………………………………………………………………………….. 696

Упражнение 2……………………………………………………………………………………………………………….. 696

Упражнение 3……………………………………………………………………………………………………………….. 697

Упражнение 4……………………………………………………………………………………………………………….. 697

Упражнение 5……………………………………………………………………………………………………………….. 697

Упражнение 6……………………………………………………………………………………………………………….. 699

Глава 18. PostgreSQL на Python……………………………………………………………………………………………… 699

Упражнение 1……………………………………………………………………………………………………………….. 699

Упражнение 2……………………………………………………………………………………………………………….. 699

Упражнение 3……………………………………………………………………………………………………………….. 700

Упражнение 4……………………………………………………………………………………………………………….. 700

Упражнение 5……………………………………………………………………………………………………………….. 701

Упражнение 6……………………………………………………………………………………………………………….. 701

Упражнение 7……………………………………………………………………………………………………………….. 702

Глава 19. PostgreSQL на C#…………………………………………………………………………………………………….. 702

Упражнение 1……………………………………………………………………………………………………………….. 702

Упражнение 2……………………………………………………………………………………………………………….. 702

Упражнение 3……………………………………………………………………………………………………………….. 705

Упражнение 4……………………………………………………………………………………………………………….. 705

Упражнение 5……………………………………………………………………………………………………………….. 705

Упражнение 6……………………………………………………………………………………………………………….. 706

Упражнение 7……………………………………………………………………………………………………………….. 706

Глава 20. Neo4J AuraDB на Python………………………………………………………………………………………… 707

Упражнение 1……………………………………………………………………………………………………………….. 707

Упражнение 2……………………………………………………………………………………………………………….. 707

Упражнение 3……………………………………………………………………………………………………………….. 707

Упражнение 4……………………………………………………………………………………………………………….. 707

Упражнение 5……………………………………………………………………………………………………………….. 707

Глава 21. Neo4J AuraDB на С#……………………………………………………………………………………………….. 708

Упражнение 1……………………………………………………………………………………………………………….. 708

Упражнение 2……………………………………………………………………………………………………………….. 708

Упражнение 3……………………………………………………………………………………………………………….. 708

Упражнение 4……………………………………………………………………………………………………………….. 708

Упражнение 5……………………………………………………………………………………………………………….. 708

Упражнение 6……………………………………………………………………………………………………………….. 708

Упражнение 7……………………………………………………………………………………………………………….. 708

Глава 22. MongoDB Atlas на Python………………………………………………………………………………………. 709

Упражнение 1……………………………………………………………………………………………………………….. 709

Упражнение 2……………………………………………………………………………………………………………….. 709

Упражнение 3……………………………………………………………………………………………………………….. 709

Упражнение 4……………………………………………………………………………………………………………….. 710

Глава 23. MongoDB Atlas на C#……………………………………………………………………………………………… 710

Упражнение 1……………………………………………………………………………………………………………….. 710

Упражнение 2……………………………………………………………………………………………………………….. 710

Упражнение 3……………………………………………………………………………………………………………….. 710

Упражнение 4……………………………………………………………………………………………………………….. 711

Глава 24. Apache Ignite на Python………………………………………………………………………………………….. 711

Упражнение 1……………………………………………………………………………………………………………….. 711

Упражнение 2……………………………………………………………………………………………………………….. 711

Упражнение 3……………………………………………………………………………………………………………….. 712

Упражнение 4……………………………………………………………………………………………………………….. 712

Глава 25. Apache Ignite на C#…………………………………………………………………………………………………. 713

Упражнение 1……………………………………………………………………………………………………………….. 713

Упражнение 2……………………………………………………………………………………………………………….. 714

Упражнение 3……………………………………………………………………………………………………………….. 714

Упражнение 4……………………………………………………………………………………………………………….. 715

Глава 26. Введение в SQL……………………………………………………………………………………………………….. 715

Упражнение 1……………………………………………………………………………………………………………….. 715

Упражнение 2……………………………………………………………………………………………………………….. 716

Упражнение 3……………………………………………………………………………………………………………….. 717

Упражнение 4……………………………………………………………………………………………………………….. 717

Упражнение 5……………………………………………………………………………………………………………….. 718

Глава 27. Создание баз данных с помощью сценариев SQL……………………………………………….. 718

Упражнение 1……………………………………………………………………………………………………………….. 718

Упражнение 2……………………………………………………………………………………………………………….. 718

Глава 28. Обслуживание базы данных………………………………………………………………………………….. 721

Упражнение 1……………………………………………………………………………………………………………….. 721

Упражнение 2……………………………………………………………………………………………………………….. 721

Упражнение 3……………………………………………………………………………………………………………….. 722

Глава 29. Безопасность баз данных………………………………………………………………………………………. 722

Упражнение 1……………………………………………………………………………………………………………….. 722

Упражнение 2……………………………………………………………………………………………………………….. 724

Упражнение 3……………………………………………………………………………………………………………….. 725

Приложение 2. Примеры реляционных проектных решений……………….. 727

Книги…………………………………………………………………………………………………………………………………………. 729

Фильмы……………………………………………………………………………………………………………………………………… 731

Музыка……………………………………………………………………………………………………………………………………… 732

Управление документами……………………………………………………………………………………………………….. 734

Заказы клиентов………………………………………………………………………………………………………………………. 735

Смены и табели учета рабочего времени……………………………………………………………………………… 735

Сотрудники, проекты и отделы………………………………………………………………………………………………. 736

Навыки и квалификация сотрудников……………………………………………………………………………………. 737

Аренда одинаковых объектов………………………………………………………………………………………………… 738

Аренда уникальных объектов………………………………………………………………………………………………… 739

Студенты, учебные курсы и оценки……………………………………………………………………………………….. 740

Команды…………………………………………………………………………………………………………………………………… 742

Индивидуальные виды спорта……………………………………………………………………………………………….. 743

Автопарки…………………………………………………………………………………………………………………………………. 743

Контакты………………………………………………………………………………………………………………………………….. 746

Пассажиры……………………………………………………………………………………………………………………………….. 747

Рецепты…………………………………………………………………………………………………………………………………….. 749

Приложение 3. Описание файлового архива………………………………………… 751

Глоссарий…………………………………………………………………………………………….. 752

Предметный указатель…………………………………………………………………………. 766

Род Стивенс

Род Стивенс (Rod Stephens)— программист и преподаватель, широко известный автор 37 технических книг и более 250 статей о языках программирования C#, Java и других. Его читательская аудитория насчитывает миллионы человек, постоянно пользующихся предложенными им решениями, приёмами и образцами кода.

Опубликовано

Вышла книга “MySQL. Практические рецепты”

MySQL. Практические рецепты

Изложены фундаментальные идеи SQL и MySQL. Рассмотрены базовые принципы построения запросов и такие основы SQL, как объединения таблиц, фильтрация данных для создания расширенных запросов, форматирование запросов, построение подзапросов, генерация производных таблиц, структурирование запросов и вывод таблиц. Подробно описаны принципы анализа данных с использованием наборов данных MySQL. Представлены методики выполнения сложных запросов к базам данных. Показано использование простой математики и логики, множественных фильтров, описаны приемы агрегирования данных. Рассказывается о том, как проводить скользящий анализ, изучать временные ряды, а также управлять сложными массивами данных в MySQL.

Для разработчиков и администраторов баз данных, программистов

Эффективная работа с базами данных MySQL с помощью SQL-операций, извлечения данных и пользовательских запросов

Книга поможет вам с помощью практических советов изучить процесс создания SQL-запросов от самого начального уровня до экспертного. Вы освоите различные методы извлечения нужных сведений из баз данных MySQL.

Подробно изложены фундаментальные идеи SQL и MySQL. Вы познакомитесь с построением запросов с использованием простых, а затем более сложных объединений таблиц и постепенно освоит приемы фильтрации данных для создания расширенных запросов.  Рассматриваются такие основы SQL, как форматирование запросов, построение подзапросов, генерация производных таблиц. Книга дает возможность лучше понять архитектуру баз данных MySQL на основе SQL-вычислений, реляционной логики, группировки и агрегирования данных. Рассказывается о том, как проводить скользящий анализ, изучать временные ряды, а также управлять сложными массивами данных в MySQL.

В книге:

  • Подробно описаны принципы анализа данных с использованием наборов данных MySQL
  • Представлены методики выполнения сложных запросов к базам данных MySQL
  • Рассматриваются такие понятия SQL, как объединение таблиц, фильтрация данных, структурирование запросов и вывод таблиц
  • Показано использование простой математики и логики, множественных фильтров, описаны приемы агрегирования данных
  • Даны примеры грамотного использования табличных выражений, подзапросов и сложных вычислений, правильного применения расширенных методов для проведения анализа скользящих и временных рядов
  • Практические примеры проводят читателя через все этапы освоения SQL — от новичка до мастера

Для кого эта книга

Эта книга предназначена для специалистов по работе с данными: разработчиков баз данных, разработчиков SQL, аналитиков данных и экспертов по бизнес-аналитике, которые хотят создавать сложные запросы и извлекать нужную аналитику из своих наборов данных. Книга также поможет умным новичкам найти и использовать готовые SQL-запросы  из книги в своей работе.

Книгу “MySQL. Практические рецепты” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Об авторе. 15

Об авторе рецензии. 16

Благодарности. 17

Введение. 18

Зачем нужно изучать SQL?. 18

Почему MySQL?. 19

Что представляет собой SQL?. 19

Для кого предназначена эта книга. 19

Что даст вам эта книга. 20

Как читать эту книгу. 20

Детализированный запрос. 21

Структура книги. 21

Цветные изображения. 23

Образец данных и образцы запросов. 23

Версии MySQL. 23

Теперь самое время начать работу с запросами к MySQL. 23

ГЛАВА 1. Составление основных запросов SQL.. 25

Предварительные условия. 25

  1. Реляционные базы данных. 26
  2. Запуск MySQL Workbench. 27
  3. Подключение к базе данных. 30
  4. Просмотр таблиц в базе данных. 31
  5. Обнаружение всех представлений в базе данных. 32
  6. Использование клиентской командной строки. 32
  7. Вывод данных в таблицу. 35
  8. Отображение данных из определенного поля. 38
  9. Поиск столбцов в таблице. 39
  10. Отображение данных из определенного набора полей. 40
  11. Использование командной строки для отображения структуры таблицы.. 41
  12. Изменение имени поля в выходных данных. 42
  13. Сортировка данных. 43
  14. Сортировка данных в порядке, обратном алфавитному. 46
  15. Применение нескольких сортировочных критериев. 47
  16. Ограничение количества отображаемых записей. 48

Резюме. 50

Основные знания, приобретенные в этой главе. 50

ГЛАВА 2. Использование нескольких таблиц при составлении
запросов данных. 53

Хранение данных в нескольких таблицах. 53

  1. Соединение таблиц. 54
  2. Соединение таблиц с разными именами полей и связями. 58
  3. Удаление дубликатов из результатов запроса. 59
  4. Соединение нескольких таблиц. 62
  5. Использование псевдонимов таблиц. 65
  6. Соединение нескольких таблиц. 68
  7. Визуализация баз данных. 70
  8. Использование представлений для запоминания сложных объединений таблиц 72

Резюме. 73

Основные знания, приобретенные в этой главе. 74

ГЛАВА 3. Расширенное соединение таблиц. 75

Многообразие типов соединений таблиц. 75

  1. LEFT JOIN и возврат всех данных из таблицы с левым соединением.. 76
  2. RIGHT JOIN и возврат всех данных из таблицы с правым соединением.. 79
  3. Соединения через промежуточные таблицы.. 81
  4. Использование в соединениях нескольких полей. 83
  5. Объединение таблицы с самой собой. 85
  6. Соединение таблиц по диапазонам значений. 88
  7. Перекрестные соединения. 91
  8. Объединение концепций. 92

Резюме. 93

Основные знания, приобретенные в этой главе. 93

ГЛАВА 4. Фильтрация данных. 95

Использование языка SQL для фильтрации данных. 95

  1. Фильтрация данных с помощью соединений. 96
  2. Фильтрация данных с использованием соединения нескольких таблиц. 96
  3. Фильтрация выводимых данных с помощью промежуточных таблиц. 99
  4. Фильтрация текста. 102
  5. Применение нескольких текстовых фильтров. 103
  6. Исключение элемента. 105
  7. Использование нескольких фильтров исключения. 106
  8. Фильтрация чисел, превышающих заданный порог. 108
  9. Фильтрация чисел ниже определенного порога. 109
  10. Фильтрация по значениям до определенного числа включительно. 110
  11. Фильтрация по диапазону значений. 111
  12. Использование булевых фильтров (True или False) 113

Резюме. 115

Основные знания, приобретенные в этой главе. 115

ГЛАВА 5. Применение сложных фильтров при составлении запросов. 117

Комплексные методы фильтрации. 117

  1. Фильтры “или… или…”. 118
  2. Одновременное использование нескольких отдельных критериев. 119
  3. Использование нескольких фильтров и исключение данных. 120
  4. Одновременная фильтрация текста и чисел. 122
  5. Одновременное применение сложных альтернативных фильтров. 123
  6. Поиск с учетом регистра. 126
  7. Отключение чувствительности к регистру в фильтрах. 127
  8. Поиск с использованием подстановочных знаков. 129
  9. Подстановочные знаки для исключения данных. 131
  10. Включение чувствительности к регистру в фильтрах подстановочных знаков 132
  11. Фильтрация данных по определенной части текста. 133
  12. Работа с NULL, или с незаполненными полями. 136
  13. Поиск с помощью регулярных выражений. 138

Резюме. 139

Основные знания, полученные в этой главе. 140

ГЛАВА 6. Выполнение простых расчетов. 141

Выполнение вычислений на языке SQL. 141

  1. Выполнение простых математических действий. 141
  2. Анализ типов данных в представлениях MySQL. 144
  3. Изоляция сегментов формул с использованием математики. 146
  4. Расчет коэффициентов. 147
  5. Предотвращение ошибок деления на ноль. 149
  6. Увеличение значений на определенный процент. 150
  7. Сортировка вывода по результату расчетов. 151
  8. Обработка недостающих данных. 153
  9. Фильтрация вычислений. 155
  10. Сложные вычисляемые фильтры.. 157
  11. Быстрое написание точного SQL-запроса. 160

Резюме. 161

Основные знания, полученные в этой главе. 161

ГЛАВА 7. Объединение результатов. 163

Объединение данных в SQL-запросе. 163

  1. Подсчет итоговых показателей таблицы.. 164
  2. Использование рассчитанных сумм.. 165
  3. Группировка суммарных показателей. 166
  4. Использование нескольких уровней группирования. 167
  5. Расчет средних значений. 169
  6. Подсчет сгруппированных элементов. 170
  7. Подсчет уникальных элементов. 172
  8. Отображение верхнего и нижнего числовых порогов. 173
  9. Групповая фильтрация. 174
  10. Фильтрация суммарных результатов. 175
  11. Выбор данных на основе суммарных результатов и определенных критериев фильтрации 176
  12. Сортировка по суммарным результатам.. 178

Резюме. 179

Основные знания, полученные в этой главе. 180

ГЛАВА 8. Работа с датами в MySQL.. 181

Анализ данных за определенный период времени. 181

  1. Фильтрация записей по дате. 182
  2. Фильтрация данных по диапазону дат. 183
  3. Способ указания дат в запросах MySQL. 185
  4. Расчет количества дней между двумя датами. 187
  5. Объединение данных по диапазону дат. 189
  6. Удаление элемента времени из фильтруемой даты.. 191
  7. Фильтрация по годам.. 193
  8. Фильтрация записей за несколько лет. 194
  9. Фильтрация данных по году и месяцу. 196
  10. Поиск данных по определенному кварталу. 197
  11. Фильтрация данных по дням недели. 199
  12. Поиск записей для определенной недели года. 200
  13. Объединение данных по дням недели определенного года. 201
  14. Сортировка данных по полному названию дня недели. 202
  15. Суммарные итоговые и средние показатели по дням года. 204
  16. Совокупные итоговые и средние показатели по дням месяца. 205
  17. Отображение обобщенных значений за месяц. 207
  18. Отображение суммарных данных за 75 дней до определенной даты.. 208
  19. Отображение данных за предыдущие три месяца. 210
  20. Определение текущей системной даты.. 212

Резюме. 212

Основные знания, полученные в этой главе. 213

ГЛАВА 9. Форматирование текста в результатах запроса. 215

Оптимизация вывода результата SQL-запросов. 215

  1. Добавление текста в выходные данные. 215
  2. Добавление нескольких фрагментов текста к числам.. 217
  3. Объединение столбцов с использованием различных разделителей. 218
  4. Предотвращение появления значения NULL в объединенном выводе. 221
  5. Соединение и группировка. 222
  6. Объединение столбцов. 223
  7. Преобразование текста в верхний регистр. 225
  8. Преобразование текста в нижний регистр. 226
  9. Извлечение нескольких символов из поля. 227
  10. Отображение трех символов справа от текста. 228
  11. Отображение заданного количества символов из определенного места текста 230
  12. Фильтрация записей по части поля. 231
  13. Фильтрация данных по определенным символам в заданной позиции внутри поля 232
  14. Объединение с частью поля. 234

Резюме. 235

Основные знания, полученные в этой главе. 235

ГЛАВА 10. Форматирование чисел и дат. 237

Представление чисел и дат. 237

  1. Отбрасывание десятичных знаков из выходных данных. 238
  2. Округление поля до ближайшего целого числа. 239
  3. Округление значения до ближайшего целого числа. 240
  4. Округление значения в большую или меньшую сторону до ближайшей тысячи 241
  5. Отображение значения в определенном числовом формате. 242
  6. Отображение значения в определенной валюте. 244
  7. Указание формата локали. 246
  8. Вывод даты в определенном формате. 247
  9. Вывод даты в формате ISO Date. 250
  10. Представление времени в определенном формате. 252

Резюме. 254

Основные знания, полученные в этой главе. 254

ГЛАВА 11. Использование базовой логики для улучшения анализа. 257

Применение SQL-логики. 257

  1. Генерирование предупреждения при превышении значения. 257
  2. Сокращение текста и добавление многоточий для обозначения усечения. 259
  3. Разработка сложных расчетных оповещений. 260
  4. Создание ключевых показателей эффективности. 263
  5. Классификация ряда элементов при отсутствии необходимых категорий
    в данных. 265
  6. Создание специальных групп категорий. 268
  7. Использование нескольких специальных категорий. 270
  8. Распределение данных по категориям с использованием нескольких вложенных классификаций 271
  9. Объединение специальных категорий. 273
  10. Размещение значений NULL в начале или конце списка. 276
  11. Классификация данных по произвольным категориям.. 278

Резюме. 280

Основные знания, полученные в этой главе. 280

ГЛАВА 12. Вложенные запросы.. 283

Что такое вложенные запросы?. 283

  1. Добавление сводных полей к подробным наборам данных. 284
  2. Отображение значения в процентах общего числа. 286
  3. Использование вложенного запроса для фильтрации данных. 289
  4. Использование вложенного запроса как компонента вычисления
    для фильтрации данных. 290
  5. Фильтрация объединенного диапазона данных с помощью нескольких вложенных запросов 293
  6. Фильтрация результатов объединения с помощью второго объединения. 295
  7. Вложенные внутренние запросы.. 296
  8. Использование вложенных запросов для исключения данных. 299
  9. Несколько вложенных внутренних запросов. 301
  10. Фильтрация по основным и вложенным запросам.. 304
  11. Применение отдельных фильтров во вложенном и основном запросах. 306

Резюме. 308

Основные знания, полученные в этой главе. 308

ГЛАВА 13. Производные таблицы.. 309

Что представляет собой производная таблица?. 309

  1. Использование производной таблицы для создания промежуточных вычислений 310
  2. Группировка и упорядочивание данных посредством пользовательской классификации 315
  3. Присоединение производных таблиц к другим таблицам.. 317
  4. Использование нескольких результатов из производной таблицы для фильтрации данных 321
  5. Сложные сводные производные таблицы.. 324
  6. Объединение нескольких производных таблиц. 326
  7. Использование нескольких производных таблиц для сложных объединений. 330
  8. Использование производных таблиц для присоединения несвязанных таблиц 333
  9. Сравнение данных за год с помощью производной таблицы.. 336
  10. Синхронизация фильтров между производной таблицей и основным запросом 338

Резюме. 340

Основные знания, полученные в этой главе. 340

ГЛАВА 14. Общие табличные выражения. 341

Оптимизация сложных запросов с помощью общих табличных выражений. 341

  1. Базовые общие табличные выражения. 342
  2. Вычисление с помощью CTE средних значений по нескольким
    величинам.. 345
  3. Повторное использование CTE в запросе. 347
  4. Использование CTE в производной таблице для обеспечения двух
    разных уровней объединения данных. 349
  5. Использование CTE для выделения данных из отдельного набора
    на другом уровне детализации. 352
  6. Использование нескольких общих табличных выражений. 354
  7. Вложенные общие табличные выражения. 357
  8. Использование нескольких общих табличных выражений для сравнения разрозненных наборов данных 359

Резюме. 363

Основные знания, полученные в этой главе. 363

ГЛАВА 15. Коррелированные вложенные запросы.. 365

Зачем использовать коррелированные вложенные запросы?. 365

  1. Простые коррелированные вложенные запросы.. 366
  2. Коррелированные вложенные запросы для отображения процентных
    долей определенного итогового значения. 368
  3. Сравнение наборов данных с помощью коррелированного вложенного запроса 369
  4. Дублирование вывода коррелированного вложенного запроса в результатах выполнения запроса 371
  5. Агрегированные коррелированные вложенные запросы.. 373
  6. Использование коррелированных вложенных запросов для фильтрации данных по совокупному значению.. 375
  7. Использование коррелированных вложенных запросов для обнаружения записей 377
  8. Использование коррелированного вложенного запроса для исключения данных 379
  9. Сложные объединения в коррелированных вложенных запросах. 380
  10. Использование коррелированного вложенного запроса для проверки значений в разных таблицах 383

Резюме. 384

Основные знания, полученные в этой главе. 384

ГЛАВА 16. Манипулирование набором данных. 387

Применение наборов данных для объединения и сопоставления данных. 387

  1. Чтение данных из нескольких одинаково структурированных таблиц
    с помощью оператора UNION.. 388
  2. Поиск и определение одинаковых данных в нескольких таблицах. 390
  3. Выделение общих элементов из нескольких подмножеств данных. 392
  4. Объединение в одном вложенном запросе нескольких одинаковых
    таблиц. 395
  5. Выделение из двух наборов данных неодинаковых записей. 396
  6. Отображение полных записей для несовпадающих данных. 398
  7. Отображение полных записей для одинаковых данных. 401

Резюме. 404

Основные знания, полученные в этой главе. 404

ГЛАВА 17. Использование SQL для более сложных вычислений. 407

Дополнительные методы расчета. 407

  1. Расчет процентного соотношения по каждой записи в наборе данных. 408
  2. Повторное использование нескольких вложенных запросов. 409
  3. Отбрасывание дробной части числа из результатов вычислений. 412
  4. Числовые типы данных. 413
  5. Преобразование типа отформатированных исходных данных в числовой тип, пригодный для использования. 415
  6. Проверка сбоев при удалении символов форматирования. 418
  7. Проверка наличия значений, не являющихся числовыми. 419
  8. Вычисление с помощью оператора MOD остатка от деления. 420
  9. Создание финансовых расчетов. 423
  10. Использование таблицы для получения последовательного списка
    чисел. 426
  11. Формирование случайной выборки из набора данных. 428

Резюме. 430

Основные знания, полученные в этой главе. 430

ГЛАВА 18. Сегментирование и классификация данных. 433

Ранжирование и сегментация данных. 433

  1. Упорядочивание данных по рангам.. 434
  2. Создание нескольких ранжированных групп. 436
  3. Создание нескольких рейтинговых групп и подгрупп. 438
  4. Фильтрация данных по рейтингу элементов. 440
  5. Классификация данных в строгом порядке ранжирования. 442
  6. Разделение данных на децили. 446
  7. Построение значений для перцентиля. 448
  8. Извлечение данных из определенного квинтиля. 450
  9. Возвращение верхнего N процента набора данных. 452
  10. Вычисление общих продаж.. 454
  11. Классификация данных с помощью функции PERCENT_RANK() 456

Резюме. 457

Основные знания, полученные в этой главе. 458

ГЛАВА 19. Скользящий анализ. 459

Промежуточные итоговые и средние значения, промежуточные подсчеты
и сравнительные значения. 459

  1. Добавление текущих итогов. 460
  2. Использование оконных функций в обобщенном запросе. 462
  3. Перезагрузка текущих итогов. 464
  4. Оконные функции во вложенном запросе. 466
  5. Добавление уникальных идентификаторов на лету с помощью
    функции ROW_NUMBER() 469
  6. Отображение записей с отсутствующими данными. 471
  7. Отображение полного диапазона дат и связанных с ними данных. 474
  8. Сравнение данных с данными из предыдущих записей. 477
  9. Сравнение данных по времени с помощью функций FIRST_VALUE()
    и LAST_VALUE() 481
  10. Отображение изменяющихся средних значений по заданному
    количеству записей. 483
  11. Отображение первой и последних четырех продаж по каждому
    клиенту. 486

Резюме. 488

Основные знания, полученные в этой главе. 488

ГЛАВА 20. Анализ данных, изменяющихся с течением времени. 491

Временной анализ. 491

  1. Обобщенные значения за год до настоящего времени. 492
  2. Объединение значений за месяц до настоящего времени. 494
  3. Возврат суммарных значений за квартал и до настоящего времени. 496
  4. Выделение данных за предыдущий месяц. 498
  5. Использование производной таблицы для сравнения данных
    со значениями предыдущего года. 500
  6. Нахождение общей суммы за каждый будний день в течение года. 502
  7. Подсчет количества выходных дней между двумя датами. 507
  8. Совокупные данные за последний день месяца. 509
  9. Обобщенные данные на последнюю пятницу месяца. 512
  10. Анализ временных отрезков в виде лет, месяцев и дней. 514
  11. Выделение временных периодов из элементов даты и времени. 517
  12. Данные списка по времени суток. 519
  13. Объединение данных по часовым диапазонам.. 521
  14. Обобщенные данные с разбивкой по часам по четвертям.. 523

Резюме. 524

Основные знания, полученные в этой главе. 525

ГЛАВА 21. Вывод комплексных данных. 527

Отображение комплексных данных с помощью SQL-запроса. 527

  1. Создание сводной таблицы.. 528
  2. Создание сводной таблицы, отображающей несколько сгруппированных строк 531
  3. Отмена группировки данных. 534
  4. Добавление итогов в сводные запросы.. 537
  5. Создание понятных таблиц, включающих итоговые данные
    и промежуточные итоги. 540
  6. Работа с данными иерархического типа. 542
  7. Создание иерархий с отступом.. 545
  8. Замена в итоговом результате аббревиатур полным текстом.. 546
  9. Замена определенного количества символов другим текстом.. 548
  10. Создание списка из нескольких записей с разделителями-запятыми. 549
  11. Экспорт списков, разделенных запятыми. 552
  12. Экспорт списков с заголовками. 555
  13. Экспорт списков фиксированной ширины.. 558
  14. Удаление лишних пробелов из выходных данных. 560

Резюме. 561

Основные знания, полученные в этой главе. 562

ПРИЛОЖЕНИЯ.. 563

Приложение 1. Установка MySQL.. 565

Установка MySQL. 565

  1. Установка MySQL в операционной системе Windows. 565
  2. Установка MySQL на Macintosh. 573
  3. Установка MySQL в операционной системе Linux. 574

Приложение 2. Установка MySQL Workbench. 576

Установка MySQL Workbench в операционной системе Windows. 576

  1. Установка MySQL под операционную систему Windows. 576
  2. Установка приложения MySQL Workbench на компьютере Macintosh. 581
  3. Запуск MySQL Workbench. 581
  4. Создание соединения с MySQL. 582

Приложение 3. Настройка базы данных с примерами. 584

  1. Загрузка примеров под операционную систему Windows. 584
  2. Загрузка выборочных данных в базу данных PrestigeCars. 584
  3. Открытие примеров запросов. 585

 

Предметный указатель. 587

Adam Aspin

Адам Аспин (Adam Aspin) — аналитик данных с более чем 25-летним стажем. Работал в таких областях, как финансы, фармацевтика, коммунальные услуги, банковское дело, телекоммуникации и розничная торговля. Автор нескольких книг по различным аспектам платформы данных Microsoft, а также многочисленных публикаций на порталах SQLServerCentral.com и Simple-Talk. Регулярно выступает на различных мероприятиях, посвященных SQL Server, таких как SQLBits, SQL Saturdays/User groups и других.

Опубликовано

Новинка: “Microsoft SQL Server 2022”

Microsoft SQL Server 2022

Книга посвящена установке, настройке, администрированию и разработке баз данных с помощью СУБД MS SQL Server 2022. Материал сопровождается большим количеством примеров кода, которые можно использовать на практике. Рассмотрены основы языка запросов,  используемые типы данных, создание базы данных и основных ее объектов, средства отображения объектов и всех их характеристик. Показаны методы проектирования, создания и изменения таблиц; рассмотрены индексы, заполнение таблиц данными, изменение и удаление данных, выборка из базы, представления, транзакции, их характеристики и взаимодействие, хранимые процедуры и триггеры. Исходные коды примеров размещены на сайте издательства.

Эта книга в первую очередь предназначена тем, кто никогда не работал ни с какой версией MS SQL Server, а может быть, даже и вообще ни с какой системой управления базами данных (СУБД) — ни с реляционной, ни с сетевой, ни даже с иерархической, не говоря уж и о совсем простеньких (“настольных”) системах управления данными. Здесь вы не найдете сравнений настоящей версии сервера с предыдущими, детальных описаний того, что нового появилось в SQL Server 2022.

Я главным образом ориентируюсь на разработчиков баз данных (БД) и создателей программного продукта, требующего использования для своей работы баз данных, или на людей, которые собираются стать такими разработчиками и/или программистами.
Александр Бондарь

  • Общие сведения о SQL Server 2022
  • Принципы работы с базами данных
  • Создание базы данных и основных ее объектов
  • Проектирование, создание и изменение таблиц
  • Заполнение таблиц данными, изменение и удаление данных
  • Индексы
  • Представления
  • Транзакции, их характеристики и взаимодействие
  • Выборка данных
  • Хранимые процедуры, функции, определенные пользователем, триггеры
  • Средства отображения объектов и их характеристик

Книгу “Microsoft SQL Server 2022” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Введение. 9

Содержание книги. 11

Дополнительные материалы.. 13

Глава 1. Инсталляция программных средств. 15

1.1. Инсталляция MS SQL Server 2022 Developer 15

1.2. Установка SQL Server Management Studio. 19

Глава 2. Общие сведения о SQL Server 2022. 23

2.1. Реляционные базы данных. 23

2.1.1. Таблицы.. 23

2.1.2. Представления. 29

2.1.3. Хранимые процедуры и триггеры.. 30

2.1.4. Пользователи, привилегии и роли базы данных. 31

2.1.5. Задание первичных ключей таблиц. 31

2.1.6. Транзакции. 32

2.1.7. 12 правил Кодда. 33

2.2. Реализация отношений в реляционной модели. 34

2.2.1. Отношение “один к одному”. 34

2.2.2. Отношение “один ко многим”. 35

2.2.3. Отношение “многие ко многим”. 35

2.3. Нормализация таблиц. 36

2.3.1. Цель нормализации таблиц. 36

2.3.2. Первая нормальная форма. 37

2.3.3. Вторая нормальная форма. 39

2.3.4. Третья нормальная форма. 39

2.3.5. Другие нормальные формы.. 40

2.3.6. Денормализация таблиц. 41

2.4. Проектирование баз данных. 41

2.5. Язык Transact-SQL.. 43

2.5.1. Синтаксис. 43

2.5.2. Основные сведения о составе языка Transact-SQL.. 51

Что дальше?. 53

Глава 3. Работа с базами данных. 55

3.1. Запуск и останов экземпляра сервера. 56

3.1.1. Запуск экземпляра сервера. 56

3.1.2. Останов экземпляра сервера. 57

3.2. Что собой представляет база данных в SQL Server 58

3.2.1. Системные базы данных. 59

3.2.2. Базы данных пользователей. 61

3.2.3. Некоторые характеристики базы данных. 62

3.2.4. Некоторые характеристики файлов базы данных. 64

3.3. Получение сведений о базах данных и их файлах в текущем экземпляре сервера. 65

3.3.1. Системное представление sys.databases. 65

3.3.2. Системное представление sys.master_files. 66

3.3.3. Системное представление sys.database_files. 68

3.3.4. Системное представление sys.filegroups. 69

3.3.5. Другие средства получения сведений об объектах базы данных. 69

3.4. Создание и удаление базы данных. 72

3.4.1. Использование операторов Transact-SQL для создания, отображения
и удаления баз данных. 72

3.4.2. Создание базы данных с использованием диалоговых средств
Management Studio. 112

3.5. Изменение базы данных. 116

3.5.1. Изменение базы данных в языке Transact-SQL.. 116

3.5.2. Изменение базы данных диалоговыми средствами Management Studio. 128

3.5.3. Удаление базы данных диалоговыми средствами Management Studio. 135

3.6. Создание автономной базы данных. 135

3.6.1. Установка допустимости автономных баз данных. 136

3.6.2. Создание автономной базы данных и пользователя средствами языка Transact-SQL   137

3.6.3. Создание автономной базы данных диалоговыми средствами
Management Studio. 138

3.6.4. Создание автономного пользователя в Management Studio. 139

3.6.5. Соединение с автономной базой данных в Management Studio. 140

3.7. Создание мгновенных снимков базы данных. 141

3.8. Схемы базы данных. 143

3.8.1. Работа со схемами в Transact-SQL.. 143

3.8.2. Работа со схемами в Management Studio. 146

3.9. Средства копирования и восстановления баз данных. 148

3.9.1. Использование операторов Transact-SQL для копирования/восстановления базы данных  148

3.9.2. Использование диалоговых средств Management Studio
для копирования/восстановления базы данных. 149

3.10. Домашнее задание. 153

Что дальше?. 154

Глава 4. Типы данных. 155

4.1. Классификация типов данных в SQL Server 156

4.2. Объявление локальных переменных. 158

4.3. Числовые типы данных. 159

4.3.1. Тип данных BIT. 161

4.3.2. Целочисленные типы данных TINYINT, SMALLINT, INT, BIGINT. 163

4.3.3. Дробные числа NUMERIC, DECIMAL, SMALLMONEY, MONEY. 165

4.3.4. Числа с плавающей точкой FLOAT, REAL. 169

4.3.5. Функции для работы с числовыми данными. 170

4.4. Символьные данные. 175

4.4.1. Символьные строки CHAR, VARCHAR.. 176

4.4.2. Символьные строки NCHAR, NVARCHAR.. 177

4.4.3. Типы данных VARCHAR(MAX), NVARCHAR(MAX), VARBINARY(MAX) 178

4.4.4. Строковые функции. 178

4.5. Типы данных даты и времени. 189

4.5.1. Описание типов данных даты и времени. 189

4.5.2. Действия с датами и временем.. 191

4.6. Двоичные данные. 201

4.7. Пространственные типы данных. 202

4.7.1. Тип данных GEOMETRY. 203

4.7.2. Тип данных GEOGRAPHY. 215

4.8. Другие типы данных. 220

4.8.1. Тип данных SQL_VARIANT. 220

4.8.2. Тип данных HIERARCHYID.. 224

4.8.3. Тип данных UNIQUEIDENTIFIER.. 229

4.8.4. Тип данных CURSOR.. 230

4.8.5. Тип данных XML. 237

4.9. Создание и удаление пользовательских типов данных. 249

4.9.1. Синтаксис оператора создания пользовательского типа данных. 250

4.9.2. Создание псевдонима средствами Transact-SQL.. 251

4.9.3. Создание псевдонима в диалоговых средствах Management Studio. 252

4.9.4. Создание пользовательского табличного типа данных средствами
Transact-SQL.. 253

4.9.5. Создание пользовательского табличного типа данных диалоговыми средствами Management Studio  257

4.9.6. Удаление пользовательского типа данных. 257

Что дальше?. 259

Глава 5. Работа с таблицами. 261

5.1. Синтаксис оператора создания таблицы.. 262

5.1.1. Общие характеристики таблицы.. 263

5.1.2. Определение столбца. 265

5.1.3. Ограничения столбца и ограничения таблицы.. 268

5.1.4. Вычисляемые столбцы.. 274

5.1.5. Набор столбцов. 275

5.2. Примеры простых таблиц. 276

5.3. Создание секционированных таблиц. 289

5.3.1. Синтаксические конструкции. 289

5.3.2. Пример создания секционированной таблицы.. 292

5.3.3. Отображение результатов создания таблицы.. 301

5.3.4. Изменение характеристик секционированной таблицы.. 305

5.4. Создание таблиц диалоговыми средствами. 307

5.4.1. Создание таблицы секционирования. 307

5.4.2. Создание таблицы секционирования, схемы секционирования
и функции секционирования. 317

5.5. Отображение состояния секционированных таблиц. 323

5.6. Файловые потоки. 324

5.7. Удаление таблиц. 330

5.7.1. Определение зависимостей таблицы.. 330

5.7.2. Удаление таблицы оператором DROP TABLE.. 333

5.7.3. Удаление таблицы диалоговыми средствами Manager Studio. 333

5.8. Изменение характеристик таблиц. 335

5.8.1. Изменение таблиц при использовании оператора Transact-SQL.. 336

5.8.2. Изменение таблиц средствами Management Studio. 341

5.8.3. Построение диаграммы базы данных. 366

Что дальше?. 368

Глава 6. Индексы.. 369

6.1. Отображение индексов. 370

6.2. Работа с индексами средствами Transact-SQL.. 371

6.2.1. Создание обычного (реляционного) индекса. 371

6.2.2. Создание индекса для представлений. 378

6.2.3. Создание columnstore индекса. 379

6.2.4. Создание индекса для столбца XML.. 380

6.2.5. Создание пространственного индекса. 385

6.2.6. Удаление индекса. 387

6.2.7. Изменение индекса. 388

6.3. Работа с индексами в диалоговых средствах Management Studio. 390

6.3.1. Создание индекса в Management Studio. 390

6.3.2. Удаление индекса в Management Studio. 394

6.3.3. Изменение индекса в Management Studio. 394

Что дальше?. 394

Глава 7. Добавление, изменение и удаление данных. 395

7.1. Обобщенное табличное выражение. 395

7.2. Добавление данных (оператор INSERT) 396

7.3. Изменение данных (оператор UPDATE) 403

7.4. Удаление данных (оператор DELETE) 407

7.5. Удаление строк таблицы (оператор TRUNCATE TABLE) 408

7.6. Добавление, изменение или удаление строк таблицы (оператор MERGE) 408

Что дальше?. 414

Глава 8. Выборка данных. 415

8.1. Оператор SELECT. 415

8.2. Оператор UNION.. 424

8.3. Операторы EXCEPT, INTERSECT. 424

8.4. Примеры выборки данных. 425

8.4.1. Список выбора. 425

8.4.2. Упорядочение результата (ORDER BY) 427

8.4.3. Условие выборки данных (WHERE) 428

8.4.4. Соединение таблиц. 436

8.4.5. Группировка результатов выборки (GROUP BY, HAVING) 444

8.5. Использование операторов UNION, EXCEPT, INTERSECT. 449

Что дальше?. 450

Глава 9. Представления. 451

9.1. Синтаксис операторов для представлений. 452

9.1.1. Создание представления. 452

9.1.2. Изменение представления. 453

9.1.3. Удаление представления. 453

9.2. Создание представлений в Transact-SQL.. 454

9.3. Создание представлений диалоговыми средствами Management Studio. 458

Что дальше?. 460

Глава 10. Транзакции. 461

10.1. Понятие и характеристики транзакций. 461

10.2. Операторы работы с транзакциями. 462

10.3. Уровни изоляции транзакции. 464

Что дальше?. 466

Глава 11. Хранимые процедуры, функции,
определенные пользователем, триггеры.. 467

11.1. Язык хранимых процедур и триггеров. 467

11.1.1. Блок операторов BEGIN/END.. 468

11.2. Хранимые процедуры.. 472

11.2.1. Создание хранимой процедуры.. 472

11.2.2. Изменение хранимой процедуры.. 474

11.2.3. Удаление хранимой процедуры.. 474

11.2.4. Использование хранимых процедур. 475

11.3. Функции, определенные пользователем.. 480

11.3.1. Создание функции. 480

11.3.2. Изменение функций. 481

11.3.3. Удаление функций. 482

11.3.4. Использование функций. 482

11.4. Триггеры.. 483

11.4.1. Создание триггеров. 483

11.4.2. Изменение триггеров. 485

11.4.3. Удаление триггеров. 486

11.4.4. Использование триггеров. 487

Приложения. 491

Приложение 1. Двенадцать правил Кодда. 493

Приложение 2. Зарезервированные слова Transact-SQL.. 495

Приложение 3. Утилита командной строки sqlcmd. 501

Приложение 4. Характеристики базы данных. 503

П4.1. Параметры Auto. 505

П4.2. Параметры доступности базы данных. 506

П4.3. Параметры автономной базы данных. 508

П4.4. Параметры восстановления. 509

П4.5. Общие параметры SQL.. 509

П4.6. Параметры компонента Service Broker 513

Приложение 5. Языки, представленные в SQL Server. 515

Приложение 6. Описание электронного архива. 517

Предметный указатель. 519

Бондарь Александр

Бондарь Александр Григорьевич — преподаватель, опытный технический писатель. Автор переводов на русский язык книг Х. Борри «Firebird. Руководство разработчика баз данных» и Д. Петковича «Microsoft SQL Server 2008. Руководство для начинающих», а также автор книг «InterBase и Firebird. Практическое руководство для умных пользователей и начинающих разработчиков», «Microsoft SQL Server 2012» и «Microsoft SQL Server 2014». Александр является прирожденным методистом, умеющим излагать сложные вопросы программирования доступным для читателя языком.