Антипаттерны SQL. Как избежать ловушек при работе с базами данных Год издания: 2024 Автор: Карвин Билл Издательство: Питер ISBN: 978-5-4461-2178-6 Серия: Библиотека программиста Язык: Русский Формат: PDF Качество: Издательский макет или текст (eBook) Интерактивное оглавление: Да Количество страниц: 368 Описание: Язык SQL необходим для работы со структурированными данными. Программисты, прекрасно знающие свой любимый язык (Java, Python или Go), не могут разбираться во всем, и часто не являются экспертами в SQL. Это приводит к появлению антипаттернов, — решений, которые на первый взгляд кажутся правильными, но со временем создают всё больше проблем. Научитесь выявлять и обходить многие из этих распространенных ловушек! Проведите рефакторинг унаследованного кошмара и превратите его в жизнеспособную модель данных! Примеры SQL-кода основаны на версии MySQL 8.0, но в тексте также упоминаются другие популярные РСУБД. В примерах кода используется Python 3.9+ или Ruby 2.7+.
Примеры страниц (скриншоты)
Оглавление
БЛАГОДАРНОСТИ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 ВВЕДЕНИЕ . 18 О НАУЧНОМ РЕДАКТОРЕ РУССКОГО ИЗДАНИЯ . 22 ОТ ИЗДАТЕЛЬСТВА . 22 ГЛАВА 1. ЧТО ТАКОЕ АНТИПАТТЕРН? . 23ЧАСТЬ I АНТИПАТТЕРНЫ ЛОГИЧЕСКОГО ПРОЕКТИРОВАНИЯ БАЗ ДАННЫХ ГЛАВА 2. КРИВАЯ ДОРОЖКА . 30 ГЛАВА 3. НАИВНОЕ ПРИМЕНЕНИЕ ДЕРЕВЬЕВ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 ГЛАВА 4. ОБЯЗАТЕЛЬНЫЙ ID . 64 ГЛАВА 5. СУЩНОСТЬ БЕЗ КЛЮЧА . 77 ГЛАВА 6. СУЩНОСТЬ — АТРИБУТ — ЗНАЧЕНИЕ . 86 ГЛАВА 7. ПОЛИМОРФНАЯ СВЯЗЬ . 103 ГЛАВА 8. МНОГОСТОЛБЦОВЫЕ АТРИБУТЫ . 116 ГЛАВА 9. «ТРИББЛЫ» МЕТАДАННЫХ . 125ЧАСТЬ II АНТИПАТТЕРНЫ ФИЗИЧЕСКОГО ПРОЕКТИРОВАНИЯ БАЗ ДАННЫХ ГЛАВА 10. ОШИБКИ ОКРУГЛЕНИЯ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 ГЛАВА 11. 31 ВКУС . 146 ГЛАВА 12. ФАНТОМНЫЕ ФАЙЛЫ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 ГЛАВА 13. ИНДЕКСНЫЙ ДРОБОВИК . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 6 Краткое содержание ЧАСТЬ III АНТИПАТТЕРНЫ ЗАПРОСОВ ГЛАВА 14. СТРАХ НЕИЗВЕСТНОГО . 182 ГЛАВА 15. НЕОДНОЗНАЧНЫЕ ГРУППЫ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..................................................194 ГЛАВА 16. СЛУЧАЙНЫЙ ВЫБОР . 207 ГЛАВА 17. ПОИСКОВАЯ СИСТЕМА ДЛЯ БЕДНЫХ . 216 ГЛАВА 18. СПАГЕТТИ-ЗАПРОСЫ . 230 ГЛАВА 19. НЕЯВНЫЕ СТОЛБЦЫ . 241ЧАСТЬ IV АНТИПАТТЕРНЫ РАЗРАБОТКИ ПРИЛОЖЕНИЙ ГЛАВА 20. НЕЗАЩИЩЕННЫЕ ПАРОЛИ . 250 ГЛАВА 21. SQL-ИНЪЕКЦИИ . 265 ГЛАВА 22. ЧИСТКА ПСЕВДОКЛЮЧА . 285 ГЛАВА 23. НЕ ВИЖУ ЗЛА . 294 ГЛАВА 24. ДИПЛОМАТИЧЕСКИЙ ИММУНИТЕТ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..........................................303 ГЛАВА 25. СТАНДАРТНЫЕ РАБОЧИЕ ПРОЦЕДУРЫ . 317ЧАСТЬ V ДОПОЛНЕНИЕ: МИНИ-АНТИПАТТЕРНЫ ВНЕШНИХ КЛЮЧЕЙ ГЛАВА 26. ОШИБКИ ВНЕШНИХ КЛЮЧЕЙ В СТАНДАРТНОМ SQL . 330 ГЛАВА 27. ОШИБКИ ВНЕШНИХ КЛЮЧЕЙ В MYSQL . 343 ПРИЛОЖЕНИЕ. ПРАВИЛА НОРМАЛИЗАЦИИ . 351 БИБЛИОГРАФИЯ . 366 О главление Отзывы о книге «Антипаттерны SQL» . 14 БЛАГОДАРНОСТИ . 17 ВВЕДЕНИЕ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 О втором издании . 19 Для кого эта книга . 19 О книге . 20 Условные обозначения . 20 Онлайн-ресурсы . 21 О НАУЧНОМ РЕДАКТОРЕ РУССКОГО ИЗДАНИЯ . 22 ОТ ИЗДАТЕЛЬСТВА . 22 ГЛАВА 1. ЧТО ТАКОЕ АНТИПАТТЕРН? . 23 Типы антипаттернов . 23 Анатомия антипаттерна . 24 Диаграммы «объект — отношение» . 25 Пример базы данных . 26ЧАСТЬ I АНТИПАТТЕРНЫ ЛОГИЧЕСКОГО ПРОЕКТИРОВАНИЯ БАЗ ДАННЫХ ГЛАВА 2. КРИВАЯ ДОРОЖКА 30 Цель: хранение многозначных атрибутов . 31 Антипаттерн: форматирование списка, разделенного запятыми . 31 Как распознать антипаттерн . 35 Решение: создание таблицы пересечений . 36 Мини-антипаттерн: разбиение CSV-данных на строки . 39 8 Оглавление ГЛАВА 3. НАИВНОЕ ПРИМЕНЕНИЕ ДЕРЕВЬЕВ . 42 Цель: хранение и загрузка иерархий . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .................................................43 Антипаттерн: постоянная зависимость от родителя . 43 Как распознать антипаттерн . 47 Допустимые применения антипаттерна . 48 Решение: использование альтернативных моделей деревьев . 48 Какое решение использовать? . 60 Мини-антипаттерн: на моем компьютере все работает . 62 ГЛАВА 4. ОБЯЗАТЕЛЬНЫЙ ID 64 Цель: установление соглашений первичного ключа . 65 Антипаттерн: на любой случай жизни . 66 Как распознать антипаттерн . 72 Допустимые применения антипаттерна . 72 Решение: ситуационное . 73 ГЛАВА 5. СУЩНОСТЬ БЕЗ КЛЮЧА 77 Антипаттерн: без ограничений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .......................................................78 Как распознать антипаттерн . 81 Допустимые применения антипаттерна . 82 Решение: объявление ограничений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..................................................83 ГЛАВА 6. СУЩНОСТЬ — АТРИБУТ — ЗНАЧЕНИЕ . 86 Цель: поддержка переменных атрибутов . 86 Антипаттерн: использование обобщенной таблицы атрибутов . 88 Как распознать антипаттерн . 94 Допустимые применения антипаттерна . 94 Решение: моделирование подтипов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 ГЛАВА 7. ПОЛИМОРФНАЯ СВЯЗЬ . 103 Цель: ссылки на несколько родительских таблиц . 104 Антипаттерн: использование внешнего ключа двойного назначения . 104 Как распознать антипаттерн . 108 Допустимые применения антипаттерна . 109 Решение: упрощение отношений . 109 9 Оглавление ГЛАВА 8. МНОГОСТОЛБЦОВЫЕ АТРИБУТЫ . 116 Цель: хранение многозначных атрибутов . 116 Антипаттерн: создание нескольких столбцов . 117 Как распознать антипаттерн . 120 Решение: создание зависимой таблицы . 122 Мини-антипаттерн: хранение цен . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...................................................123 ГЛАВА 9. «ТРИББЛЫ» МЕТАДАННЫХ 125 Цель: обеспечение масштабируемости . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .126 Как распознать антипаттерн . 131 Допустимые применения антипаттерна . 132 Решение: партицирование и нормализация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .133ЧАСТЬ II АНТИПАТТЕРНЫ ФИЗИЧЕСКОГО ПРОЕКТИРОВАНИЯ БАЗ ДАННЫХ ГЛАВА 10. ОШИБКИ ОКРУГЛЕНИЯ 138 Цель: дроби вместо целых чисел . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ....................................................139 Антипаттерн: использование типа данных FLOAT . 139 Как распознать антипаттерн . 143 Допустимые применения антипаттерна . 143 Решение: тип данных NUMERIC . 144 ГЛАВА 11. 31 ВКУС . 146 Цель: ограничение столбца конкретными значениями . 146 Антипаттерн: перечисление значений при определении столбца . 147 Как распознать антипаттерн . 151 Допустимые применения антипаттерна . 151 Решение: определение значений в данных . 152 Мини-антипаттерн: зарезервированные слова . 154 ГЛАВА 12. ФАНТОМНЫЕ ФАЙЛЫ 157 Цель: хранение графики или других больших данных . 158 Антипаттерн: а что, если мне нужны файлы . 158 10 Оглавление Как распознать антипаттерн . 162 Допустимые применения антипаттерна . 162 Решение: использование типа данных BLOB при необходимости . 164 ГЛАВА 13. ИНДЕКСНЫЙ ДРОБОВИК 167 Цель: оптимизация производительности . 168 Антипаттерн: беспорядочное использование индексов . 168 Как распознать антипаттерн . 173 Допустимые применения антипаттерна . 173 Решение: MENTOR . 174 Мини-антипаттерн: индексирование каждого столбца . 180ЧАСТЬ III АНТИПАТТЕРНЫ ЗАПРОСОВ ГЛАВА 14. СТРАХ НЕИЗВЕСТНОГО 182 Цель: отделить отсутствующие значения . 183 Антипаттерн: использование NULL в качестве обычного значения и наоборот . 183 Использование NULL в выражениях . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .................................................183 Как распознать антипаттерн . 186 Допустимые применения антипаттерна . 188 Решение: использование NULL как уникального значения . 188 ГЛАВА 15. НЕОДНОЗНАЧНЫЕ ГРУППЫ 194 Цель: получить строку с наибольшим значением в группе . 195 Антипаттерн: ссылка на столбцы, не входящие в группу . 195 Как распознать антипаттерн . 198 Допустимые применения антипаттерна . 199 Решение: выборка однозначных столбцов . 200 Мини-антипаттерн: портируемый SQL . 205 ГЛАВА 16. СЛУЧАЙНЫЙ ВЫБОР 207 Цель: получить образец строки данных . 207 Антипаттерн: случайная сортировка данных . 208 Как распознать антипаттерн . 209 Допустимые применения антипаттерна . 210 11 Оглавление Решение: не упорядочивать… . 210 Мини-антипаттерн: запрос нескольких случайных строк . 215 ГЛАВА 17. ПОИСКОВАЯ СИСТЕМА ДЛЯ БЕДНЫХ . 216 Цель: полнотекстовый поиск . 216 Антипаттерн: предикаты сопоставления с шаблонами . 217 Как распознать антипаттерн . 218 Допустимые применения антипаттерна . 218 Решение: правильный выбор инструмента для работы . 219 ГЛАВА 18. СПАГЕТТИ-ЗАПРОСЫ . 230 Цель: сокращение количества запросов SQL . 231 Антипаттерн: решение сложной задачи за один шаг . 231 Как распознать антипаттерн . 234 Допустимые применения антипаттерна . 234 Решение: разделяй и властвуй . 236 ГЛАВА 19. НЕЯВНЫЕ СТОЛБЦЫ . 241 Цель: компактность кода . 242 Нарушение рефакторинга . 243 Как распознать антипаттерн . 245 Допустимые применения антипаттерна . 245 Решение: явное указание столбцов . 246ЧАСТЬ IV АНТИПАТТЕРНЫ РАЗРАБОТКИ ПРИЛОЖЕНИЙ ГЛАВА 20. НЕЗАЩИЩЕННЫЕ ПАРОЛИ . 250 Цель: восстановление и сброс паролей . 250 Антипаттерн: хранение паролей в текстовом виде . 251 Как распознать антипаттерн . 254 Допустимые применения антипаттерна . 254 Решение: хранение соленого хеш-кода пароля . 255 ГЛАВА 21. SQL-ИНЪЕКЦИИ 265 Цель: написание динамических запросов SQL . 266 Антипаттерн: выполнение непроверенного ввода как кода . 266 12 Оглавление Как распознать антипаттерн . 274 Допустимые применения антипаттерна . 275 Решение: не доверяйте никому . 275 Мини-антипаттерн: параметры запроса в кавычках . 283 ГЛАВА 22. ЧИСТКА ПСЕВДОКЛЮЧА 285 Цель: очистка данных . 286 Антипаттерн: заполнение пропусков . 286 Как распознать антипаттерн . 288 Допустимые применения антипаттерна . 289 Решение: смириться . 289 Мини-антипаттерн: автоматическое увеличение в группах . 292 ГЛАВА 23. НЕ ВИЖУ ЗЛА . 294 Цель: сокращение объема кода . 295 Антипаттерн: мартышкин труд . 295 Как распознать антипаттерн . 298 Допустимые применения антипаттерна . 298 Решение: корректное восстановление после ошибок . 299 Мини-антипаттерн: чтение сообщений о синтаксических ошибках . 301 ГЛАВА 24. ДИПЛОМАТИЧЕСКИЙ ИММУНИТЕТ . 303 Цель: применение лучших практик . 304 Антипаттерн: второсортный SQL . 304 Как распознать антипаттерн . 305 Допустимые применения антипаттерна . 306 Решение: формирование разносторонней культуры качества . 306 Мини-антипаттерн: переименование . 314 ГЛАВА 25. СТАНДАРТНЫЕ РАБОЧИЕ ПРОЦЕДУРЫ 317 Цель: использование хранимых процедур . 318 Антипаттерн: делай как я . 319 Как распознать антипаттерн . 323 Допустимые применения антипаттерна . 324 Решение: переход на современные архитектуры приложений . 324 Мини-антипаттерн: хранимые процедуры в MySQL . 326 13 ОглавлениеЧАСТЬ V ДОПОЛНЕНИЕ: МИНИ-АНТИПАТТЕРНЫ ВНЕШНИХ КЛЮЧЕЙ ГЛАВА 26. ОШИБКИ ВНЕШНИХ КЛЮЧЕЙ В СТАНДАРТНОМ SQL . 330 Изменение направления ссылок . 330 Ссылки на еще не созданные таблицы . 331 Отсутствие ссылок на ключ родительской таблицы . 333 Создание отдельных ограничений для всех столбцов составного ключа . 334 Неверный порядок столбцов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ........................................................335 Несоответствие типов данных . 336 Создание осиротевших строк . 338 Применение SET NULL к столбцам, не допускающим NULL . 340 Несовместимые типы таблиц . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ........................................................342 ГЛАВА 27. ОШИБКИ ВНЕШНИХ КЛЮЧЕЙ В MYSQL 343 Использование больших типов данных . 344 Внешние ключи MySQL с неуникальными индексами . 346 Синтаксис ссылок по умолчанию . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ....................................................349 Несовместимые типы таблиц в MySQL . 349 ПРИЛОЖЕНИЕ. ПРАВИЛА НОРМАЛИЗАЦИИ . 351 Что значит «реляционный»? . 351 Мифы о нормализации . 354 Что такое нормализация? . 355 Здравый смысл . 365 БИБЛИОГРАФИЯ 366
Библиотека программиста - Карвин Билл - Антипаттерны SQL. Как избежать ловушек при работе с базами данных [2024, PDF, RUS] download torrent for free and without registration
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum