Рефакторинг баз данных: эволюционное проектирование (Refactoring Databases: Evolutionary Database Design)
Эта книга посвящена эволюционному изменению баз данных. Она написана в 2006 года, а в те времена реляционные базы данных были стандартом де-факто и альтернатив особо не было. Потому вся книга посвящена эволюции подходов с жесткой схемой данных (schema on read), в ней активно рассматривается использование триггеров и хранимых процедур и не идет речи про
polyglot persistence. Зато авторы говорят про написание тестов, процесс деплоя, sandboxes для разработчиков и так далее. Я читал эту книгу первый раз лет десять назад и она мне тогда казалось достаточно актуальной. Сейчас я перечитал ее и часть вещей кажутся очевидными, а вот часть все еще интересны:)
Если говорить про содержание книги, то в ней 11 глав
1)
Evolutionary database development - здесь авторы вводят понятие эволюционного развития баз данных и перечисляют техники: database refactoring, evolutionary data modeling, database regression testing, configuration management of database artifacts, developer sandboxes
2)
Database refactoring - в этой главе авторы проводят параллели между рефакторингом кода и рефакторингом схемы данных, а также класификацию видов рефакторинга, что подробнее раскрываются в главах 6-10. Здесь же идет речь про database smells: multipurpose column, multipurpose table, redundant data, tables with too many columns, tables with too many rows, "smart" columns, fear of change
3)
The process of database refactoring - здесь авторы рассказывают про процесс с созданием новой схемы, параллельным существованием новой и старой схемы, а потом выключением старой. По-факту, это стандартная история с compatibility между версиями (forward и backward compatibility)
4)
Deploying to production - здесь немного про CI/CD для баз данных (сейчас эта глава кажется очевидной)
5)
Database refactoring strategies - глава про то, как подходить к миграциям с точки зрения организационного процесса
Дальше авторы проходятся по классам рефакторинга, которые они определили в главе 2.
6)
Structural refactoring - здесь рассматриваются простые вещи, навроде того, как удалить колонку, таблицу, view, объединить колонки, переименновать их или например перейти от отношения один-ко-многим к отношению многие-ко-многим
7)
Data quality refactoring - добавить или удалить ограничения на nullable, ввести формат данных для колонки, добавить или удалить дефолтное значение или переместить данные
😍
Referential integrity refactoring - как добавить или удалить constraints, добавить каскадное удаление, реализовать hard или soft delete, сделать историю на триггерах
9)
Architectural refactoring - сделать CRUD через процедуры, добавить метод на чтение через процедуры, добавить view, добавить индексы, заменить процедуру на view или наоборот:)
10)
Method refactoring - про рефакторинг триггеров, процедур и всего того, что сейчас рекомендуют использовать по минимуму
11)
Transformation - как добавить новую колонку, новую таблицу, новый view, обновить данные
В итоге, если говорить про книгу целиком, то на текущий момент она скучновата и местами очевидна, но ее все еще можно использовать как справочник того, как делать некоторые изменения в реляционных базах данных.
P.S.
Эту книгу я решил вспомнить в контексте нашего книжного клуба Code of Architecture, в котором мы в понедельник обсудим главу про эволюцию данных из книги "Building Evolutionary Architecture". В этой главе есть отсылка к этой книге "Refactoring Databases", так что я решил обновить свои воспоминания:)
#Databases #Data #Software #SoftwareArchitecture #Architecture