200 likes | 365 Views
Рефакторинг баз данных. Для начала …. Избегайте сверхспециализации ( overspecialization ). Барьер. Разработчик приложения. Разработчик базы данных. Коммуникация Сотрудничество Обмен опытом. Разработчик. Разработчик. Определение.
E N D
Для начала… • Избегайте сверхспециализации (overspecialization) Барьер Разработчик приложения Разработчик базы данных Коммуникация Сотрудничество Обмен опытом Разработчик Разработчик
Определение • Рефакторинг базы данных - изменение схемы базы данных, улучшающее ее дизайн, но не влияющее на ее поведенческую и информационную семантику • Содержит как структурные, так и функциональные аспекты
Что рефакторить в БД? БД содержит: • Данные (хранимые в соответствие со схемой) • Хранимый код Хранимый код ничем не отличается от любого другого кода (его необходимо тестировать) Схема данных (таблицы, индексы и т.д.) Наличие данных усложняет рефакторинг схемы!
Зачем рефакторить? • Исправление БД, доставшейся «внаследство» • Обеспечивать эволюционное развитие • Предотвратить избыточный дизайн (over-design)
Запахи плохого кода в БД Для хранимого кода применимы все рассмотренные запахи кода, включая: • Процедуры-монстры • Лапша-код (спагетти-код) • Дублирование кода • Перенасыщение условными операторами • и т.д. Запахи, характерные для БД: • Таблица/столбец широкого назначения • Избыточные данные (повторяющиеся в нескольких таблицах) • Таблица с огромным количеством столбцов/строк • «Умные» столбцы (с кодом xml) • Недостаток ограничений (отсутствие валидации) • Страх внесения изменений в схему данных или процедуру
Страх внесения изменений • Самый «вонючий запах» • Препятствует развитию • Снижает эффективность • Наводит еще больший беспорядок • Со временем становится только хуже
Как правильно действовать? • Создать свою песочницу (sandbox) разработки • Перенести изменения в песочницу интеграции • Внедрить в производство (production)
Песочницы Частые развертывания Контролируемые развертывания Сильно контролируемые развертывания
Тривиальные вещи • Возможно ли переименовать столбец в БД без изменения сотни приложений? • Если мы не можем сделать даже такую тривиальность, как мы можем сделать что-то поистине серьезное?
Модульные тесты в БД • Слишком сложно? • Нет хорошего средства тестирования (framework)?
Запуск модульных тестов • Анонимный PL/SQL код • Нет необходимости изменять БД • Вызов raise_application_errorс конкретным сообщением в случае возникновения ошибки • Откат (rollback) по завершению теста • Запуск при помощи любого SQL средстваили ant-скриптов
Логи изменений (changelog) • Необходимо отслеживание изменений • Написание дельта-скриптов (миграций) • В начале переходного периода • В конце переходного периода • Одинаковые скрипты для • Обновления песочниц • Развертывания на производстве
Работа в команде • Разработчики • Тесная кооперация с администраторами БД • Навыки работы с БД • Администраторы БД и проектировщики БД • Должны быть вовлечены в процесс разработки приложения • Навыки разработки приложений
Средства тестирования • Дельта-скрипты • Dbdeploy, liquibase, deltasql • Легко писать самостоятельно • PL/SQL код и