Автор: Scott W. Ambler
Автор перевода: Орда О.А.
Источник: http://www.tdan.com/view-articles/5010/Рефакторинг базы данных вносит незначительные изменения в схему базы данных который улучшает ее дизайн без изменения на практическом уровне. Иными словами, это простое преобразование базы данных, которое ничего не добавляет и не уберает. Процесс рефакторинга базы данных определяет, как безопасно развивать базы данных по шагам. Рефактоинг баз данных позволяет специалистам для работы на эволюционной основе,создавать новые приложения. Она также обеспечивает последовательную стратегию для организации вывода базы из системы наследования.
В тексте Мартина Фаулера [1] описывает технику программирования, называемую рефакторинг, это дисциплинированный способ реструктуризации кода по шагам. Рефакторинг позволяет вам модернизировать код медленно с течением времени, принять эволюционный (повторные и дополнительные) подход к программированию. Одним из важнейших аспектов рефакторинга является то, что он сохраняет поведенческих семантики кода. Вы не добавляете функциональность, когда используете рефакторинг, и вы не уменьшеете ее. Рефакторинг только улучшает дизайн вашего кода - не больше и не меньше. Рефакторинг базы данных [2, 3] простое изменение схемы базы данных, что повышает его конструкции при сохранении как его поведении так и информационной семантики, - иными словами, вы не можете добавить новую функциональность или разрушить существующую функциональность, Вы не можете добавлять новые данные, и Вы не можете изменить значение имеющихся данных. Схемы базы данных включает в себя как структурные аспекты, как таблицы и определения, а также функциональные аспекты, таких, как хранимые процедуры и триггеры. Я использую рефакторинг кода для условного обозначения традиционного рефакторинга, как описано у Мартина Фаулера и ба для обозначения рефакторинга схем баз данных. Процесс рефакторинга базы данных является акт принятия этих простых изменений в схему базы данных.
Есть две основные причины, почему вы хотите применить рефакторинг базы:
Иногда команда проекта находится в относительно простых ситуациях, "одного приложения базы данных", и если это так, они должны считать себя счастливчиками. С помощью рефакторинга изменение архитектуры базы данных очень просто - вы просто изменяете схему базы данных и обновляете приложения для использования новой версии схемы. Что является более простым, чем много внешних программ, взаимодействующих с базой данных, некоторые из которых находятся вне сферы вашего контроля. В этой ситуации вы не можете считать, что все внешние программы будут развернуты сразу, и поэтому поддержка переходного периода (также называют устаревший период) в течение которого обе старые схемы и новые схемы поддерживаются параллельно. Для остальной части этой статьи я буду считать, что вы в этой ситуации.
Чтобы использовать рефакторинг базы данных в контексте, делайте шаг через небольшой пример. Вы работаете по банковскому приложению в течение нескольких недель и заметили что-то странное о клиенте в таблице на рисунке 1 [1] - одна из имен столбцов, не легко понять. Вы решили применить рефакторинг, переименовать столбец FName в FirstName.
Рисунок 1 - Первоначальный схемы базы данных для клиентов.
Agilists как правило, работают в парах, один человек должен иметь навыки программирования приложений и другой навыки работы с данными, а в идеале оба должны иметь оба набора знаний и навыков. Пара начинается с определения того, должна ли быть переработана схема базы данных. Может быть, программист ошибся в необходимости разработки схемы, и лучше идти по схеме реорганизации. Когда работы будут закончены, эти изменения будут интегрированы в проект, а также системы перестраивается, тестирование и фиксированные по мере необходимости.
Чтобы переименовать поле в развитии системы, пара первой группы запускает все испытания, чтобы увидеть, что они проходят. Далее они пишут тест, используя Driven Design (TDD) подход [5, 6, 7]. Вероятно,проверкой окажется доступ к значению в колонке Имя. После выполнения тестов и видеть их терпят неудачу, они осуществляют фактический рефакторинга. Для этого они вносят в столбце "Имя и SynchronizeFirstName спусковой крючок
Значения триггера необходимо сохранять в столбцах синхронизации - каждая внешняя программа доступна одному пользователю, таблица должна работать с одной колонкой, но не с двумя. На первом этапе, все приложения будут работать с FName, но со временем они будут переработаны для доступа к FirstName. Есть и другие варианты, чтобы сделать это, например, просмотра и синхронизации после свершившегося факта, но я считаю, что лучше всего работают триггеры.
Имя столбца FirstName должно быть заполнено значением из столбца FName. Затем нужно запустить обе колонки параллельно в течение "переходного периода" достаточной длины, чтобы дать время команде разработчиков по обновлению и переводу всех свои приложений. Этот переходный период может длиться несколько лет, в зависимости от возможностей вашего проекта вводить новые релизы в производство. В этом случае мы решили, что переходный период будет длиться до 14 ноября 2007.
Пара повторных испытаний, и видно, что они прошли. Затем они реорганизовывают существующие тесты для работы с FirstName, а не колонкой FName. После, реорганизация базы данных завершена, в своей среде разработки пара способствует их интеграции в работу проекта, где они опять проводят испытания, устринив оставшиеся проблемы, которые они находят. Чтобы обновить схему базы данных, пара проходит соответствующие изменения и миграции сценарии в определенном порядке.
После переходного периода, удаляют исходный столбец, в результате чего конечня схемы базы данных на рис 3. Вы удалите эти вещи только по истечении достаточного количества испытаний с целью обеспечить безопасную работу. На данный момент, ваш рефакторинг завершен.
Рисунок 2 - Окончательный вариант схемы базы данных для клиентов.
Существует несколько более успешных вариантов осуществления рефакторинга базы данных, чем то, что я описал. Вам нужен способ, чтобы координировать усилия реорганизации всех команд разработчиков в вашей организации, ясно то, что это может оказаться весьма затруднительным. Кроме того, необходимо получить хорошее в развертывании рефакторинга в производстве, вновь координации усилий нескольких команд. В Рефакторинг баз данных [3], мой соавтор Pramod Sadalage и я обсуждаем несколько стратегий для каждого из этих вещей.
Я часто слышала от специалистов, что реальным решением является модель все впереди, и тогда не нужно будет реорганизовать схему базы данных. Хотя это интересное видение, и я видел работы в некоторых ситуациях, опыт последних трех десятилетий показывает, что такой подход не очень хорошо работает, на практике для всего ИТ-сообщества. Традиционный подход к моделированию данных не отражает эволюционный подход, современные методы, такие как RUP и XP, и не отражает тот факт, что бизнес для взыскательных клиентов новые возможности и изменения существующей функциональности развивается более быстрыми темпами. Старые методы просты, нужно больше, если они когда-либо были [8].
Я предлагаю вам принять Agile Model-Driven Development (AMDD) подход [9, 10], в которой некоторые улучшенные модели определения "пейзажа" вашей системы, и тогда модель покажет подробную информацию точно в срок на основе (JIT). Воспользуйтесь преимуществами моделирования, не тратя времени на чрезмерное количество документации, а также в результате бюрократия пытаясь держать слишком много артефактов, современных и синхронизированых друг с другом. Ваш код приложения и базы данных схемы развиваться как ваше понимание предметной области, и сохраняет качество за счет реорганизации и другое.
Методика рефакторинга базы данных осуществления, как и методикарефакторинга кода применяя к реализации. Рефакторинг схемы базы данных используется для облегчения добавления дополнений к нему. Вы часто обнаруживаете, что вы должны добавить новые функции к базе данных, таких, как новый столбец или процедура, но существующий вариант не самый лучший, легче поддерживать эту новую функцию. Вы начинаете с рефакторинга схемы базы данных, чтобы было легче добавить функции, а после реорганизации был с успехом применен, затем добавить эту функцию. Преимуществом данного подхода является то, что вы медленно, но постоянно, улучшение качества Вашей базы данных. Этот процесс не только делает вашу базу данных проще для понимания и использования, но также облегчает изменяться с течением времени, иными словами, вам улучшить общую производительность развития.
Мой опыт показывает, что данные специалисты могут воспользоваться внедрения современных методов эволюционной аналогичные разработчиков, и эта база данных рефакторинга является одним из нескольких важных навыков, что данные специалистов требуется. Эволюционное развитие возможно стать нормой в рамках ИТ-сообщества, а также гибких подходов разработки программного обеспечения продлить эволюционных методов, чтобы стать более эффективными. Мой совет данных профессионалов принять эволюционный и гибкий концепций и методов серьезно: они настоящие, они работают, и они здесь надолго.