Вредные советы по SQL Фёдор Самородов Фёдор Самородов • Fedor@Samorodov.ru • http://Samorodov.SU Страница 2 www.specialist.ru Вредны ли вредные советы? Вредные советы – это антишаблоны – Распознать опасную ситуацию – Сэкономить время Страница 3 www.specialist.ru Вредны ли вредные советы? Решение сложных инженерных задач всегда заканчиваются компромиссом. Объём ресурсов, используемых SQL-запросом Решение должно быть адекватно задаче. И любой антишаблон из тех, что мы сегодня рассмотрим, в некоторых обстоятельствах может оказаться лучше любого «правильного» решения! Страница 4 Скорость работы SQLзапроса Время, затраченное на написание, отладку и доработку SQLзапроса www.specialist.ru Вредный совет №1 Используйте многозначные столбцы Страница 5 www.specialist.ru Вредный совет №1 Используйте многозначные столбцы Это не потребует серьёзных изменений в существующей базе Страница 6 www.specialist.ru Вредный совет №1 Используйте многозначные столбцы Как выбрать строки по нужному значению? Как контролировать целостность? Как агрегировать многозначный столбец? Как обрабатывать UPDATE для многозначного столбца? Ограничена ли длина списка? Страница 7 www.specialist.ru Вредный совет №2 Применяйте многозначные атрибуты Страница 8 www.specialist.ru Вредный совет №2 Применяйте многозначные атрибуты Структура базы остаётся простой Нет нарушения реляционной модели данных Это не потребует серьёзных изменений в существующей базе Страница 9 www.specialist.ru Вредный совет №2 Применяйте многозначные атрибуты Как осуществлять поиск по значению? Как добавлять и удалять значения? Как обеспечить уникальность значений? А если выбранного количества столбцов не хватит? Страница 10 www.specialist.ru Вредный совет №3 Применяйте атрибутную схему (Entity-Attribute-Value) Страница 11 www.specialist.ru Вредный совет №3 Применяйте атрибутную схему (Entity-Attribute-Value) Универсальное решение Отлично масштабируется Страница 12 www.specialist.ru Вредный совет №3 Применяйте атрибутную схему (Entity-Attribute-Value) Как обработать разные атрибуты в одном запросе? Как обеспечить целостность данных? Как реализовать NOT NULL? Что с типами атрибутов? Как быть с внешними ключами? Как контролировать правильность названий атрибутов? Как восстановить «эталонную» таблицу? Страница 13 www.specialist.ru Вредный совет №4 Применяйте полиморфные ассоциации Страница 14 www.specialist.ru Вредный совет №4 Применяйте полиморфные ассоциации Универсальное решение Отлично масштабируется Страница 15 www.specialist.ru Вредный совет №4 Применяйте полиморфные ассоциации Не работают внешние ключи Усложняется соединение таблиц по внешнему ключу Страница 16 www.specialist.ru Вредный совет №5 Клонируйте таблицы Страница 17 www.specialist.ru Вредный совет №5 Клонируйте таблицы Пользователей всегда интересует только один конкретный год Структура базы становится понятнее для пользователя Чем меньше строк в каждой таблице, тем быстрее запросы Страница 18 www.specialist.ru Вредный совет №5 Клонируйте таблицы Как осуществлять контроль целостности? Как обрабатывать UPDATE? Как контролировать первичный ключ? Куда будут ссылаться внешние ключи? Объединяющие запросы потребуют UNION ALL Как обновлять метаданные? Страница 19 www.specialist.ru Вредные советы 1. Используйте многозначные столбцы 2. Применяйте многозначные атрибуты 3. Применяйте атрибутную схему 4. Применяйте полиморфные ассоциации 5. Чаще клонируйте таблицы Страница 20 www.specialist.ru «Звоночки» Смешивание данных и метаданных Использование приёмов ООП в базах данных 1. Давайте поместим метаданные туда, где должны быть данные Реляционная модель и ООП – это как корпускулярноволновой дуализм! 2. Давайте поместим данные туда, где должны быть метаданные Страница 21 www.specialist.ru В следующих сериях Это были вредные советы для тех, кто проектирует базы данных А дальше: Ещё одна порция вредных советов для разработчиков баз данных Вторая серия вредных советов для пользователей баз данных Вредные советы для администраторов баз данных Вредные советы для разработчиков приложений, использующих базы данных Страница 22 www.specialist.ru