Содержание.
Глава 1. Введение 10
1.1. Для кого предназначена эта книга 11
1.2. Что содержится в этой книге 12
1.3. Чего нет в этой книге 14
1.4. Условные обозначения 15
1.5. Пример базы данных 16
1.6. Благодарности 20
Часть 1. Антипаттерны логической структуры базы данных 21
Глава 2. Блуждания без ориентиров 21
2.1. Цель: хранение многозначных атрибутов 22
2.2. Антипаттерн: форматирование списков с запятыми-разделителями 23
2.3. Способы распознавания антипаттерна 26
2.4. Допустимые способы использования антипаттерна 27
2.5. Решение: создание таблицы пересечений 27
Глава 3. Простые деревья 32
3.1. Цель: хранение и запрос иерархий 32
3.2. Антипаттерн: постоянная зависимость от одного родителя 33
3.3. Способы распознавания антипаттерна 37
3.4. Допустимые способы использования антипаттерна 38
3.5. Решение: использование альтернативных моделей дерева 40
Глава 4. Обязательные идентификаторы 54
4.1. Цель: создание соглашений первичного ключа 1 55
4.2. Антипаттерн: один размер для всех случаев 57
4.3. Способы распознавания антипаттерна 61
4.4. Допустимые способы использования антипаттерна 62
4.5. Решение: специальная подгонка 62
Глава 5. Записи без ключей 66
5.1. Цель: упрощение архитектуры базы данных 67
5.2. Антипаттерн: пропуск ограничений 67
5.3. Способы распознавания антипаттерна 71
5.4. Допустимые способы использования антипаттерна 71
5.5. Решение: объявление ограничений 72
Глава 6. EAV (Объект-Атрибут-Значение) 75
6.1. Цель: поддержка атрибутов переменных 75
6.2. Антипаттерн: использование таблицы общих атрибутов 77
6.3. Способы распознавания антипаттерна 83
6.4. Допустимые способы использования антипаттерна 83
6.5. Решение: моделирование подтипов 85
Глава 7. Полиморфные ассоциации 93
7.1. Цель: ссылка на несколько родительских объектов 94
7.2. Амтипатгерп: использование внешнего ключа двойного назначения 95
7.3. Способы распознавания антипаттерна 98
7.4. Допустимые способы использования антипаттерна 99
7.5. Решение: упрощение отношений 100
Глава 8. Многостолбчатые атрибуты 108
8.1. Цель: хранение многозначных атрибутов 108
8.2. Антипаттерн: создание нескольких столбцов 109
8.3. Способы распознавания антипаттерна 113
8.4. Допустимые способы использования антипаттерна 114
8.5. Решение: создание зависимой таблицы 115
Глава 9. Трибблы метаданных 117
9.1. Цель: поддержка масштабируемости 118
9.2. Антипатгерн: клонирование таблиц или столбцов 118
9.3. Способы распознавания антипаттерна 124
9.4. Допустимые способы использования антипаттерна 125
9.5. Решение: разделение и нормализация 126
Часть II. Антипаттерны физической структуры базы данных 130
Глава 10. Ошибки округления 130
10.1. Цель: использование дробных значений вместо целых чисел 131
10.2. Антипаттерн: использование типа данных FLOAT 131
10.3. Способы распознавания антипаттерна 135
10.4. Допустимые способы использования антипаттерна 136
10.5. Решение: использование типа данных NUMERIC 136
Глава 11. 31 разновидность 138
11.1. Цель: ограничение столбца конкретными значениями 138
11.2. Антипаттерн: задание значений в определении столбца 139
11.3. Способы распознавания антипаттерна 143
11.4. Допустимые способы использования антипаттерна 144
11.5. Решение: задание значений в данных 144
Глава 12. Фантомные файлы 148
12.1. Цель: хранение изображений и других большеразмерных файлов 149
12.2. Антипаттерн: предположение о необходимости использования файлов 149
12.3. Способы распознавания антипаттерна 153
12.4. Допустимые способы использования антипаттерна 154
12.5. Решение: использование типов данных BLOB по мере необходимости 155
Глава 13. Беспорядочное создание индексов 158
13.1. Цель: оптимизация производительности 159
13.2. Антипатгерн: использование индексов без какого-либо плана 159
13.3. Способы распознавания антипаттерна 164
13.4. Допустимые способы использования антипаттерна 165
13.5. Решение: использование процедуры MENTOR в отношении индексов 165
Часть III. Антипаттерны запросов 172
Глава 14. Боязнь неизвестного 172
14.1. Цель: распознавание отсутствующих значений 173
14.2. Антипатгерн: использование Null как обычного значения или наоборот 173
14.3. Способы распознавания антипаттерна 177
14.4. Допустимые способы использования антипаттерна 178
14.5. Решение: использование Null в качестве уникального значения 179
Глава 15. Неоднозначные группы 184
15.1. Цель: получение строки с наибольшим значением в группе 185
15.2. Антипаттерн: ссылка на несгруппированные столбцы 186
15.3. Способы распознавания антипаттерна 188
15.4. Допустимые способы использования антипаттерна 190
15.5. Решение: однозначное использование столбцов 191
Глава 16. Случайный выбор 197
16.1. Цель: выбор типовой строки 197
16.2. Антипаттерн: сортировка данных случайным образом 198
16.3. Способы распознавания антипаттерна 199
16.4. Допустимые способы использования антипаттерна 200
16.5. Решение: без какого-либо определенного порядка 200
Глава 17. Собственная поисковая система 205
17.1. Цель: полнотекстовый поиск 205
17.2. Антипаттерн: предикаты сопоставления с шаблонами 206
17.3. Способы распознавания антипаттерна 207
17.4. Допустимые способы использования антипаттерна 208
17.5. Решение: использование для работы подходящего инструмента 208
Глава 18. Запутанный запрос 221
18.1. Цель: уменьшение SQL-запросов 222
18.2. Антипаттерн: решение сложной проблемы за один шаг 222
18.3. Способы распознавания антипаттерна 225
18.4. Допустимые способы использования антипаттерна 225
18.5. Решение: разделяй и властвуй 226
Глава 19. Скрытые столбцы 232
19.1. Цель: уменьшение объема клавиатурного ввода 233
19.2. Антипаттерн: запутывающие комбинация клавиш 234
19.3. Способы распознавания антипаттерна 236
19.4. Допустимые способы использования антипаттерна 236
19.5. Решение: именование столбцов в явном виде 237
Часть IV. Антипаттерны разработки приложений 240
Глава 20. Считываемые пароли 240
20.1. Цель: восстановление или сброс паролей 240
20.2. Антипаттерн: хранение паролей в открытой текстовой форме 241
20.3. Способы распознавания антипаттерна 244
20.4. Допустимые способы использования антипаттерна 244
20.5. Решение: хранение пароля в виде беспорядочного набора символов 245
Глава 21. Инъекция SQL-кода 254
21.1. Цель: создание динамических SQL-запросов 255
21.2. Антипаттерн: выполнение непроверенных входных данных в качестве кода 256
21.3. Способы распознавания антипаттерна 263
21.4. Допустимые способы использования антипаттерна 264
21.5. Решение: никому нельзя доверять 264
Глава 22. Псевдоключ аккуратности 271
22.1. Цель: приведение данных в порядок 271
22.2. Антипаттерн: заполнение углов 272
22.3. Способы распознавания антипаттерна 275
22.4. Допустимые способы использования антипаттерна 275
22.5. Решение: преодоление проблемы 275
Глава 23. Незамечаемые недостатки 280
23.1. Цель: написание меньшего количества кода 281
23.2. Антипаттерн: трудновыполнимое дело 281
23.3. Способы распознавания антипаттерна 284
23.4. Допустимые способы использования антипаттерна 284
23.5. Решение: изящное восстановление после возникновения ошибок 285
Глава 24. Дипломатическая неприкосновенность 288
24.1. Цель: использование передовых методов работы 289
24.2. Антипаттерн: использование SQL как «вспомогательного» языка 289
24.3. Способы распознавания антипаттерна 290
24.4. Допустимые способы использования антипаттерна 291
24.5. Решение: формирование собирательной культуры качества 291
Глава 25. Волшебные бобы 301
25.1. Цель: упрощение моделей в архитектуре МУС 302
25.2. Антипаттерн: модель, представляющая собой активную запись 303
25.3. Способы распознавания антипаттерна 310
25.4. Допустимые способы использования антипаттерна 310
25.5. Решение: модель с активной записью 311
Часть V. Приложения 318
Приложение А. Правила нормализации 318
А.1. Что значит «реляционный»? 318
А.2. Мифы о нормализации 321
А.З. Что такое нормализация? 322
А.4. Здравый смысл 333
Мнения читателей о книге «Программирование баз данных SQL» 334
Добавить комментарий