Система Orphus

Рефакторинг баз данных: эволюционное проектирование

Авторы: Скотт В. Эмблер
Прамодкумар Дж. Садаладж
Издательство: Вильямс, 2007
368 страниц

Материал предоставил: Денис Миллер
Найти в магазинах
Купить в Books.Ru
Купить в OZ.by (Беларусь)

Аннотация

Содержание
Об авторах
Введение
Комментарий

Аннотация

В настоящей книге приведены рекомендации, касающиеся того, как использовать методы рефакторинга для усовершенствования баз данных. Она посвящена описанию процедур проектирования базы данных с точки зрения архитектора объектно-ориентированного программного обеспечения, поэтому представляет интерес и для разработчиков прикладного кода, и для специалистов в области реляционных баз данных. В книгу включены многочисленные советы и рекомендации по улучшению качества проектирования базы данных. Значительное место уделено описанию того, как действовать в тех практических ситуациях, когда база данных уже существует, но плохо спроектирована, или когда реализация первоначального проекта базы данных не позволила получить качественную модель. Прежде всего книгу можно использовать в качестве технического руководства для разработчиков, непосредственно занятых на производстве. С другой стороны, она представляет собой теоретическую работу, стимулирующую дальнейшие исследования в направлении объединения объектно- ориентированного и реляционного подходов.

Содержание

Об авторах
Предисловия
Введение
Необходимость в осуществлении эволюционной разработки баз данных
Суть адаптивных методов
Как читать эту книгу
Благодарности

Глава 1. Эволюционная разработка баз данных

1.1. Рефакторинг баз данных
1.2. Эволюционное моделирование баз данных
1.3. Регрессионное тестирование базы данных
1.4. Управление конфигурациями артефактов базы данных
1.5. Варианты среды, предназначенные для разработчиков
1.6. Недостатки эволюционных методик разработки баз данных,препятствующие их внедрению
1.7. Резюме

Глава 2. Операции рефакторинга базы данных

2.1. Рефакторинг кода
2.2. Рефакторинг баз данных
2.2.1. Среда базы данных с одним приложением
2.2.2. Среда базы данных с несколькими приложениями
2.2.3. Сохранение семантики
2.3. Категории операций рефакторинга базы данных
2.4. Признаки нарушений в работе базы данных
2.5. Перспективы дальнейшего распространения операций рефакторинга
2.6. Возможности упрощения операций рефакторинга схемы базы данных
2.7. Резюме

Глава 3. Процесс рефакторинга базы данных

3.1. Проверка приемлемости рассматриваемой операции рефакторинга базы данных
3.2. Выбор наиболее подходящей операции рефакторинга базы данных
3.3. Обозначение как устаревшей исходной схемы базы данных
3.4. Тестирование до выполнения, во время выполнения и после выполнения операции рефакторинга
3.4.1. Проверка схемы базы данных
3.4.2. Проверка результатов переноса данных
3.4.3. Тестирование внешних программ доступа
3.5. Модификация схемы базы данных
3.6. Перенос исходных данных
3.7. Рефакторинг внешних программ доступа
3.8. Выполнение регрессионных тестов
3.9. Применение в работе средств контроля версий
3.10. Объявление о проведении операции рефакторинга
3.11. Резюме

Глава 4. Развертывание на производстве

4.1. Эффективное развертывание с передачей из одной специализированной среды в другую
4.2. Применение наборов операций рефакторинга базы данных
4.3. Планирование подходящих интервалов развертывания
4.4. Развертывание всей системы
4.5. Удаление устаревшей схемы
4.6. Резюме

Глава 5. Операции рефакторинга базы данных

5.1. Преимущественное использование небольших изменений
5.2. Однозначная идентификация отдельных операций рефакторинга
5.3. Реализация крупных изменений в виде нескольких небольших изменений
5.4. Применение таблицы конфигурации базы данных
5.5. Преимущественное применение для синхронизации триггеров, а не представлений или пакетов
5.6. Применение достаточно продолжительного переходного периода
5.7. Упрощение стратегии группы контроля над внесением изменений в базу данных
5.8. Упрощение процедуры согласования с другими группами
5.9. Инкапсуляция средств доступа к базе данных
5.10. Возможность легко настраивать среду базы данных
5.11. Предотвращение дублирования кода SQL
5.12. Перевод информационных активов базы данных под контроль процедур управления изменениями
5.13. Учет необходимости перераспределения обязанностей в самой организации
5.14. Резюме
Сетевые ресурсы

Глава 6. Операции рефакторинга структуры

Проблемы, часто возникающие при реализации операций рефакторинга структуры
Операция рефакторинга ''Удаление столбца''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Удаление таблицы''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программы доступа
Операция рефакторинга ''Удаление представления''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Введение вычисляемого столбца''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программы доступа
Операция рефакторинга ''Введение суррогатного ключа''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Слияние столбцов''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Слияние таблиц''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Перемещение столбца''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Переименование столбца''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Переименование таблицы''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы путем введения новой таблицы
Процедура обновления схемы с помощью обновляемого представления
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Переименование представления''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Замена данных типа LOB таблицей''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Замена столбца''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Замена связи ''один ко многим'' ассоциативной таблицей''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Замена суррогатного ключа естественным ключом''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Разбиение столбца''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Разбиение таблицы''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа

Глава 7. Операции рефакторинга качества данных

Проблемы, часто возникающие при осуществлении операций рефакторинга качества данных
Операция рефакторинга ''Добавление поисковой таблицы''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Применение стандартных кодовых обозначений''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Применение стандартного типа''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Осуществление стратегии консолидированных ключей''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Уничтожение ограничения столбца''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Уничтожение значения, заданного по умолчанию''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Уничтожение столбца, не допускающего NULL-значений''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Введение ограничения столбца''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Введение общего формата''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Введение заданного по умолчанию значения''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Преобразование столбца в недопускающий NULL-значения''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Перемещение данных''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Замена кодового обозначения типа флажками свойств''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа

Глава 8. Операции рефакторинга ссылочной целостности

Операция рефакторинга ''Добавление ограничения внешнего ключа''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Добавление триггера для вычисляемого столбца''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Уничтожение ограничения внешнего ключа''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Введение каскадного удаления''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Введение физического удаления''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Введение программного удаления''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Введение триггера для накопления исторических данных''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа

Глава 9. Операции рефакторинга архитектуры

Операция рефакторинга ''Добавление методов CRUD''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Добавление зеркальной таблицы''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Добавление метода чтения''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Инкапсуляция таблицы в представление''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Содержание
Процедура обновления программ доступа
Операция рефакторинга ''Введение вычислительного метода''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Введение индекса''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Введение таблицы только для чтения''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Перенос метода из базы данных''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Перенос метода в базу данных''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Замена метода (методов) представлением''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Замена представления методом (методами)''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Операция рефакторинга ''Использование официально заданного источника данных''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа

Глава 10. Операции рефакторинга методов 299

10.1. Операции рефакторинга, которые приводят к изменению интерфейса
Операция рефакторинга ''Добавление параметра''
Операция рефакторинга ''Параметризация метода''
Операция рефакторинга ''Удаление параметра''
Операция рефакторинга ''Переименование метода''
Операция рефакторинга ''Переупорядочение параметров''
Операция рефакторинга ''Замена параметра явно заданными методами''
10.2. Операции рефакторинга внутренней организации методов
Операция рефакторинга ''Консолидация условного выражения''
Операция рефакторинга ''Декомпозиция условного выражения''
Операция рефакторинга ''Извлечение метода''
Операция рефакторинга ''Введение переменной''
Операция рефакторинга ''Удаление флажка управления''
Операция рефакторинга ''Удаление посредника''
Операция рефакторинга ''Переименование параметра''
Операция рефакторинга ''Замена подстановки литерала поиском в таблице''
Операция рефакторинга ''Замена вложенного условного выражения защитными конструкциями''
Операция рефакторинга ''Разбиение временной переменной''
Операция рефакторинга ''Подстановка алгоритма''

Глава 11. Преобразования

Преобразование ''Вставка данных''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Преобразование ''Введение нового столбца''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Преобразование ''Введение новой таблицы''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Преобразование ''Введение представления''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа
Преобразование ''Обновление данных''
Обоснование
Потенциальные преимущества и недостатки
Процедура обновления схемы
Процедура переноса данных
Процедура обновления программ доступа

Приложение А. Обозначения языка моделирования данных UML
Приложение Б. Глоссарий
Приложение В. Литература
Приложение Г. Список операций рефакторинга и операций преобразования
Приложение Д. Отзывы
Предметный указатель

Об авторах

Скотт В. Эмблер

Консультант в области усовершенствования программных процессов (Software Process Improvement - SPI), проживающий недалеко от Торонто. Скотт создал методологии AM (Agile Modeling) (www.agilemodeling.com), AD (Agile Data) (www.agiledata.org), EUP (Enterprise Unified Process) (www.enterpriseunifiedprocess.com) и AUP (Agile Unified Process) (www.ambysoft.com/unifiedprocess), а также возглавил работы по их усовершенствованию. Скотт - автор нескольких книг, в том числе Agile Modeling (John Wiley & Sons, 2002), Agile Database Techniques (John Wiley & Sons, 2003), The Object Primer 3rd Edition (Cambridge University Press, 2004), The Enterprise Unified Process (Prentice Hall, 2005) и The Elements of UML 2.0 Style (Cambridge University Press, 2005). Скотт работает в качестве редактора с правами публикации в коммерческом журнале Software Development (www.sdmagazine.com), участвует и выступает с программными речами на различных международных конференциях, включая Software Development, UML World, Object Expo, Java Expo и Application Development. Скотт закончил Университет Торонто, получив степень магистра информатики. В свободное время Скотт изучает стили каратэ - годзюрю и кобудо.

Прамодкумар Дж. Садаладже

Консультант компании ThoughtWorks, которая занимается разработкой и интеграцией приложений для предприятия. Прамод стал инициатором внедрения методов и процессов эволюционного проектирования и рефакторинга баз данных в 1999 году, работая над крупными приложением J2EE с использованием методологии экстремального программирования (Extreme Programming - XP). С тех пор Прамод, принимая участие во многих проектах, неизменно применяет эти методы и процессы. Прамод охотно делится своми знаниями в области администрирования баз данных в эволюционных проектах, применения эволюционных процессов к базам данных и влияния эволюционных подходов на администрирование базы данных, и в письменном, и в устном виде, чтобы дать возможность всем желающим освоить эволюционные методы проектирования баз данных. Свое свободное время Прамод проводит с женой и дочерью, совершая прогулки и бегая трусцой.

Введение

За последние несколько лет в индустрии информационной технологии (ИТ) стремительно распространились эволюционные методологии разработки программногообеспечения, часто называемые адаптивными, такие как экстремальное программирование (Extreme Programming - XP), метод Scrum, унифицированный процесс компании Rational (Rational Unified Process - RUP), адаптивный унифицированный процесс (Agile Unified Process - AUP) и разработка на основе функций (Feature-Driven Development - FDD). Чтобы было проще понять особенности этих методов, подчеркнем, что эволюционный метод по своему характеру является и итеративным, и инкрементным, а адаптивный подход является эволюционным и вместе с тем характеризуется высокой степенью взаимодействия участников разработки. Кроме того, в организациях, применяющих информационные технологии, все шире внедряются такие адаптивные методики, как рефакторинг, программирование в паре, разработка на основе тестирования (Test-Driven Development - TDD) и адаптивное проектирование на основе модели (Agile Model Driven Development - AMDD). Эти подходы и методики были разработаны и получили свое развитие в течение многих лет в среде рядовых разработчиков и доведены до совершенства обычными программистами, а не придуманы теоретиками, живущими в башнях из слоновой кости. Короче говоря, эти эволюционные и адаптивные методики, повидимому, невероятно успешно действуют на практике.

В своей оригинальной книге Refactoring Мартин Фаулер дал определение рефакторинга как небольшого изменения в исходном коде, которое способствует улучшению проекта кода без изменения его семантики. Иными словами, рефакторинг - это улучшение качества сделанной вами работы без нарушения или добавления чего-либо. Кроме того, в своей книге Мартин обсуждает идею, что если возможно подвергнуть рефакторингу прикладной исходный код, то есть возможность подвергнуть рефакторингу схему базы данных. Но Мартин указал, что рефакторинг баз данных - очень сложная задача,поскольку базы данных отличаются высокой степенью связности; поэтому он решил исключить эту тематику из своей книги.

После публикации книги Refactoring в 1999 году оба автора настоящей книги стали искать способы проведения рефакторинга схем базы данных. Первоначально мы работали отдельно, встречаясь друг с другом на таких конференциях, как Software Development (www.sdexpo.com), и ведя переписку с помощью списков рассылки (например, www.agiledata.org/feedback.html). Мы обсуждали идеи, посещали лекции и презентации друг друга на конференциях и вскоре обнаружили, что наши идеи и методы пересекаются, а также являются весьма взаимосовместимыми. Поэтому мы объединили свои усилия в написании настоящей книги, чтобы поделиться своим опытом и рассказать о методах развития схем баз данных путем проведения операций рефакторинга.

Все примеры, приведенные в книге, написаны на языке Java и на языках баз данных Oracle. Практически каждое описание операции рефакторинга базы данных включает код, предназначенный для модификации непосредственно самой схемы базы данных, а применительно к некоторым наиболее интересным операциям рефакторинга мы показали, какое влияние они могут оказать на прикладной код Java. Безусловно, нельзя найти две базы данных, которые были бы неотличимыми друг от друга, поэтому мы включили описания альтернативных стратегий реализации в тех случаях, когда между программными продуктами баз данных имеются тонкие, но важные различия. В некоторых случаях мы обсуждаем альтернативные реализации каких-то аспектов рефакторинга с помощью таких характерных для СУБД Oracle средств, как команды SET UNUSED или RENAME TO, а во многих приведенных нами примерах кода используются средства COMMENT ON, предусмотренное в СУБД Oracle. В других программных продуктах баз данных предусмотрены другие средства, позволяющие упростить рефакторинг баз данных, и хороший администратор базы данных должен знать, как воспользоваться этими особенностями в своих интересах. Но лучше всего, если в будущем появятся инструментальные средства рефакторинга баз данных, которые могли бы выполнять всю эту работу за нас. Кроме того, мы стремились показать настолько простой код Java, чтобы можно было преобразовать его в код C#, C++ или даже Visual Basic практически без затруднений.

Комментарий

Денис Миллер, инструктор Luxoft (http://luxoft.ru/edu)

Эволюция корпоративных приложений требует от разработчика повышенного внимания к выбору архитектуры. Не секрет, что во время разработки, появляются новые требования со стороны заказчика и приходиться пересматривать первоначальную архитектуру, в том числе и структуру базы данных. Или другая ситуация. Часто в фазе поддержки и эволюции приложения появляется желание переделать всё "с нуля". Известно, что неудачно выбранная архитектура базы данных может вызвать множество неприятностей: увеличение времени выполнения запроса, сложность модификации схемы, появление устаревших и потерянных данных, рост повторяющихся данных, сложности таблиц и запутанности связей. Дорого обходится изменение схемы, вызывающее волнообразное "падение" всех приложений, использующих базу:

В книге "Refactoring Database: Evolutionary Database Design" рассказывается о тактике внесения изменений в схему базы данных и секретах, как избежать возможных трудностей. Автор предлагаемой книги и адепт Agile-технологии разработки программного обеспечения Скотт Амблер обобщил опыт поддержки разрабатываемых им приложений на основе реляционных баз данных и отразил его в книге. Амблер предложил ряд методов по изменению внутренней структуры баз данных, приводящих к улучшению качества базы, более легкой поддержки и эволюции системы.

Представленная книга полезна архитекторам, администраторам баз данных и простым разработчикам. После внимательного изучения предлагаемых решений, станут ясны причины многих проблем. Знание нюансов рефакторинга поможет при проектировании новых баз данных. Отрадно также, что каждый из подходов преобразования содержит и обратный вариант. Например, обсуждается перенос бизнес-логики в хранимые процедуры и наоборот. Для каждого варианта приведена аргументация, остаётся только выбрать, что лучше подходит в конкретной задаче.

Идеологически книга разбита на 2 части. Первая часть описывает общий процесс внесения изменений. Вторая - конкретные примеры рефакторинга, сгруппированные в пять категорий.

Внесение изменений в базу данных на порядок сложнее, чем изменение кода программы. Причина сложности в нечёткости границ использования базы. Ключевая проблема, когда множество различных приложений обращаются к единой базе. Важно сохранить не только синтаксическое сходство поведения базы, но и семантическое значение сущностей. Рефакторинг базы данных занимает значительное время, включающее миграцию данных и стабилизационный период для гарантии отсутствия побочных проявлений во всех приложениях.

Для тех, кто участвует в поддержке корпоративных приложений, не секрет как сложен процесс внесения изменений в схему базы данных. Вкратце, процесс рефакторинга (см. главу 4) состоит в ряде шагов: изменения, тестирования, внедрения, завершение изменений. Внеся изменения в схему, необходимо внести изменения в приложения, провести миграцию данных, выполнить регрессионные тесты. Автор подчёркивает важность тщательных проверок. Проверки проводятся в специальных тестовых средах, называемых "песочницами" (sandboxes). После тестирования в песочнице программистов, тестирование переходит в среду, дублирующую производственную. И только потом изменения достигают производственной среды (production).

Если процесс наскучил, переходим к "душкам" (database smells - проблемные области, которые требуют рефакторинга). Очень важные главы 2 и 5. В главе 2 (п.4) описаны типовые архитектурные промахи, в главе 5 стратегии опытного проектировщика баз. Во избежание многих осложнений, автор приводит "идеальную" архитектуру для проведения рефакторинга, в которой весь интерфейс взаимодействия прячется в выделенном слое (framework, п. 2.6). Противопоказано бездумное применение предложенной архитектуры, ещё Петр I говорил "Не держись устава, аки стенки. В каждом случае надо и голову приложить".

Вторая часть наполнена конкретными техниками рефакторинга. Автор разбил все методы на пять групп: рефакторинг структуры, качества, целостности, архитектуры и методов.

Рефакторинг кода (method refactoring) - это конспект книги Мартина Фаулера "Рефакторинг: улучшение кода" в приложении к хранимым процедурам. Структурный рефакторинг (Structural Refactoring) описывает простые преобразования со столбцами в таблицах. Рефакторинг качества (Data Quality Refactorings) и целостности (Referential Integrety Refactoring) содержит интересные доводы для архитекторов баз данных. Например: преимущество Lookup-таблиц, введение или исключение ограничений (constraints); случаи использования внешнего ключа (FK, Foreign Key), триггера (немного о trigger hell), и операция Delete во всех проявлениях. Хорошие примеры для размышления и сравнения.

Серьезная глава - архитектурный рефакторинг (Architectural Refactoring). В ней демонстрируются подходы расположения бизнес-логики, инкапсуляции данных через слой хранимых процедур и представлений (view) и много другого интересного.

В завершении книги приведены советы по миграции данных и краткий справочник по UML, который советую скопировать и использовать при подготовке спецификаций.

Вывод: справочное пособие для принятия решений в области баз данных. Решили использовать FK - открыли соответствующую главу, посмотрели варианты и мотивацию.