Рефакторинг баз данных

Download Report

Transcript Рефакторинг баз данных

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