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