Антипаттерны SQL. Как избежать ловушек при работе с базами данных

Антипаттерны SQL. Как избежать ловушек при работе с базами данных

Антипаттерны SQL. Как избежать ловушек при работе с базами данных
Автор: Карвин Билл
Дата выхода: 2024
Издательство: Питер
Количество страниц: 368
Тип файла: PDF
Добавил: codelibs

Внимание!!!! Книга удалена по требованию правообладателя!!!!

Отзывы о книге «Антипаттерны SQL»....14

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

Введение....18

О втором издании....19

Для кого эта книга....19

О книге....20

Условные обозначения....20

Онлайн-ресурсы....21

О научном редакторе русского издания....22

От издательства....22

Глава 1. Что такое антипаттерн?....23

Типы антипаттернов....23

Анатомия антипаттерна....24

Диаграммы «объект — отношение»....25

Пример базы данных....26

Часть I. Антипаттерны логического проектирования баз данных....29

Глава 2. Кривая дорожка....30

Цель: хранение многозначных атрибутов....31

Антипаттерн: форматирование списка, разделенного запятыми....31

Как распознать антипаттерн....35

Решение: создание таблицы пересечений....36

Мини-антипаттерн: разбиение CSV-данных на строки....39

Глава 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

Глава 8. Многостолбцовые атрибуты....116

Цель: хранение многозначных атрибутов....116

Антипаттерн: создание нескольких столбцов....117

Как распознать антипаттерн....120

Решение: создание зависимой таблицы....122

Мини-антипаттерн: хранение цен....123

Глава 9. «Трибблы» метаданных....125

Цель: обеспечение масштабируемости....126

Как распознать антипаттерн....131

Допустимые применения антипаттерна....132

Решение: партицирование и нормализация....133

Часть II. Антипаттерны физического проектирования баз данных....137

Глава 10. Ошибки округления....138

Цель: дроби вместо целых чисел....139

Антипаттерн: использование типа данных FLOAT....139

Как распознать антипаттерн....143

Допустимые применения антипаттерна....143

Решение: тип данных NUMERIC....144

Глава 11. 31 вкус....146

Цель: ограничение столбца конкретными значениями....146

Антипаттерн: перечисление значений при определении столбца....147

Как распознать антипаттерн....151

Допустимые применения антипаттерна....151

Решение: определение значений в данных....152

Мини-антипаттерн: зарезервированные слова....154

Глава 12. Фантомные файлы....157

Цель: хранение графики или других больших данных....158

Антипаттерн: а что, если мне нужны файлы....158

Как распознать антипаттерн....162

Допустимые применения антипаттерна....162

Решение: использование типа данных BLOB при необходимости....164

Глава 13. Индексный дробовик....167

Цель: оптимизация производительности....168

Антипаттерн: беспорядочное использование индексов ....168

Как распознать антипаттерн....173

Допустимые применения антипаттерна....173

Решение: MENTOR....174

Мини-антипаттерн: индексирование каждого столбца....180

Часть III. Антипаттерны запросов....181

Глава 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

Решение: не упорядочивать…....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. Антипаттерны разработки приложений....249

Глава 20. Незащищенные пароли....250

Цель: восстановление и сброс паролей....250

Антипаттерн: хранение паролей в текстовом виде....251

Как распознать антипаттерн....254

Допустимые применения антипаттерна....254

Решение: хранение соленого хеш-кода пароля....255

Глава 21. SQL-инъекции ....265

Цель: написание динамических запросов SQL....266

Антипаттерн: выполнение непроверенного ввода как кода....266

Как распознать антипаттерн....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

Часть V. Дополнение: мини-антипаттерны внешних ключей....329

Глава 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

Что значит «реляционный»?....352

Мифы о нормализации....354

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

Здравый смысл....366

Библиография ....367

Язык SQL необходим для работы со структурированными данными. Программисты, прекрасно знающие свой любимый язык (Java, Python или Go), не могут разбираться во всем, и часто не являются экспертами в SQL. Это приводит к появлению антипаттернов, — решений, которые на первый взгляд кажутся правильными, но со временем создают всё больше проблем.Научитесь выявлять и обходить многие из этих распространенных ловушек! Проведите рефакторинг унаследованного кошмара и превратите его в жизнеспособную модель данных!Примеры SQL-кода основаны на версии MySQL 8.0, но в тексте также упоминаются другие популярные РСУБД. В примерах кода используется Python 3.9+ или Ruby 2.7+.


Похожее:

Список отзывов:

Нет отзывов к книге.