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

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