Рефакторинг баз данных
DESCRIPTION
Рефакторинг баз данных. Для начала …. Избегайте сверхспециализации ( overspecialization ). Барьер. Разработчик приложения. Разработчик базы данных. Коммуникация Сотрудничество Обмен опытом. Разработчик. Разработчик. Определение. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Рефакторинг баз данных](https://reader030.vdocuments.pub/reader030/viewer/2022020920/56815dec550346895dcc150c/html5/thumbnails/1.jpg)
Рефакторинг баз данных
![Page 2: Рефакторинг баз данных](https://reader030.vdocuments.pub/reader030/viewer/2022020920/56815dec550346895dcc150c/html5/thumbnails/2.jpg)
Для начала…•Избегайте сверхспециализации
(overspecialization)
Разработчик приложения Разработчик базы данных
Разработчик Разработчик
КоммуникацияСотрудничествоОбмен опытом
Барьер
![Page 3: Рефакторинг баз данных](https://reader030.vdocuments.pub/reader030/viewer/2022020920/56815dec550346895dcc150c/html5/thumbnails/3.jpg)
Определение•Рефакторинг базы данных - изменение
схемы базы данных, улучшающее ее дизайн, но не влияющее на ее поведенческую и информационную семантику
•Содержит как структурные, так и функциональные аспекты
![Page 4: Рефакторинг баз данных](https://reader030.vdocuments.pub/reader030/viewer/2022020920/56815dec550346895dcc150c/html5/thumbnails/4.jpg)
Что рефакторить в БД?БД содержит:
• Данные (хранимые в соответствие со схемой)• Хранимый код
Хранимый код ничем не отличается от любого другого кода (его необходимо тестировать)
Схема данных (таблицы, индексы и т.д.)Наличие данных усложняет рефакторинг схемы!
![Page 5: Рефакторинг баз данных](https://reader030.vdocuments.pub/reader030/viewer/2022020920/56815dec550346895dcc150c/html5/thumbnails/5.jpg)
Зачем рефакторить?• Исправление БД, доставшейся «в наследство»• Обеспечивать эволюционное развитие• Предотвратить избыточный дизайн (over-design)
![Page 6: Рефакторинг баз данных](https://reader030.vdocuments.pub/reader030/viewer/2022020920/56815dec550346895dcc150c/html5/thumbnails/6.jpg)
Запахи плохого кода в БДДля хранимого кода применимы все рассмотренные запахи кода, включая:
• Процедуры-монстры• Лапша-код (спагетти-код)• Дублирование кода• Перенасыщение условными операторами• и т.д.
Запахи, характерные для БД:• Таблица/столбец широкого назначения• Избыточные данные (повторяющиеся в нескольких таблицах)• Таблица с огромным количеством столбцов/строк• «Умные» столбцы (с кодом xml)• Недостаток ограничений (отсутствие валидации)• Страх внесения изменений в схему данных или процедуру
![Page 7: Рефакторинг баз данных](https://reader030.vdocuments.pub/reader030/viewer/2022020920/56815dec550346895dcc150c/html5/thumbnails/7.jpg)
Страх внесения изменений
•Самый «вонючий запах»•Препятствует развитию•Снижает эффективность•Наводит еще больший беспорядок•Со временем становится только хуже
![Page 8: Рефакторинг баз данных](https://reader030.vdocuments.pub/reader030/viewer/2022020920/56815dec550346895dcc150c/html5/thumbnails/8.jpg)
Как правильно действовать?•Создать свою песочницу (sandbox)
разработки•Перенести изменения в песочницу
интеграции•Внедрить в производство (production)
![Page 9: Рефакторинг баз данных](https://reader030.vdocuments.pub/reader030/viewer/2022020920/56815dec550346895dcc150c/html5/thumbnails/9.jpg)
Песочницы
Частые развертывания Контролируемые развертывания
Сильно контролируемые развертывания
![Page 10: Рефакторинг баз данных](https://reader030.vdocuments.pub/reader030/viewer/2022020920/56815dec550346895dcc150c/html5/thumbnails/10.jpg)
Лучший случай (наипростейший)
![Page 11: Рефакторинг баз данных](https://reader030.vdocuments.pub/reader030/viewer/2022020920/56815dec550346895dcc150c/html5/thumbnails/11.jpg)
Худший случай (сложнейший)
![Page 12: Рефакторинг баз данных](https://reader030.vdocuments.pub/reader030/viewer/2022020920/56815dec550346895dcc150c/html5/thumbnails/12.jpg)
Тривиальные вещи•Возможно ли переименовать столбец в
БД без изменения сотни приложений?•Если мы не можем сделать даже такую
тривиальность, как мы можем сделать что-то поистине серьезное?
![Page 13: Рефакторинг баз данных](https://reader030.vdocuments.pub/reader030/viewer/2022020920/56815dec550346895dcc150c/html5/thumbnails/13.jpg)
Модульные тесты в БД•Слишком сложно?•Нет хорошего средства тестирования
(framework)?
![Page 14: Рефакторинг баз данных](https://reader030.vdocuments.pub/reader030/viewer/2022020920/56815dec550346895dcc150c/html5/thumbnails/14.jpg)
Запуск модульных тестов•Анонимный PL/SQL код•Нет необходимости изменять БД•Вызов raise_application_error с
конкретным сообщением в случае возникновения ошибки
•Откат (rollback) по завершению теста•Запуск при помощи любого SQL
средства или ant-скриптов
![Page 15: Рефакторинг баз данных](https://reader030.vdocuments.pub/reader030/viewer/2022020920/56815dec550346895dcc150c/html5/thumbnails/15.jpg)
Пример теста
![Page 16: Рефакторинг баз данных](https://reader030.vdocuments.pub/reader030/viewer/2022020920/56815dec550346895dcc150c/html5/thumbnails/16.jpg)
Логи изменений (changelog)•Необходимо отслеживание изменений•Написание дельта-скриптов (миграций)
▫В начале переходного периода▫В конце переходного периода
•Одинаковые скрипты для▫Обновления песочниц▫Развертывания на производстве
![Page 17: Рефакторинг баз данных](https://reader030.vdocuments.pub/reader030/viewer/2022020920/56815dec550346895dcc150c/html5/thumbnails/17.jpg)
Простой скрипт
![Page 18: Рефакторинг баз данных](https://reader030.vdocuments.pub/reader030/viewer/2022020920/56815dec550346895dcc150c/html5/thumbnails/18.jpg)
Версионирование
![Page 19: Рефакторинг баз данных](https://reader030.vdocuments.pub/reader030/viewer/2022020920/56815dec550346895dcc150c/html5/thumbnails/19.jpg)
Работа в команде•Разработчики
▫Тесная кооперация с администраторами БД
▫Навыки работы с БД•Администраторы БД и проектировщики
БД▫Должны быть вовлечены в процесс
разработки приложения▫Навыки разработки приложений
![Page 20: Рефакторинг баз данных](https://reader030.vdocuments.pub/reader030/viewer/2022020920/56815dec550346895dcc150c/html5/thumbnails/20.jpg)
Средства тестирования•Дельта-скрипты
▫Dbdeploy, liquibase, deltasql▫Легко писать самостоятельно
•PL/SQL код и