Рефакторинг баз данных эволюционное проектирование pdf
Dating > Рефакторинг баз данных эволюционное проектирование pdf
Last updated
Dating > Рефакторинг баз данных эволюционное проектирование pdf
Last updated
Download links: → Рефакторинг баз данных эволюционное проектирование pdf → Рефакторинг баз данных эволюционное проектирование pdf
Безусловно, нельзя найти две базы данных, которые были бы неотличимыми друг от друга, поэтому мы включили описания альтернативных стратегий реализации в тех случаях, когда между программными продуктами баз данных имеются тонкие, но важные различия. Ведь если ваша квалификация позволяет сделать работу заранее, то, Стр. Операции рефакторинга ссылочной целостности 229 Глава 9.
После перехода к использованию современных методологий приходится отказываться от этого подхода, который теперь рассматривается как слишком неэффективный и рискованный; в связи с этим многие специалисты в области обработки данных чувствуют себя растерянными. В настоящей книге приведены рекомендации, касающиеся того, как использовать методы рефакторинга для усовершенствования баз данных. В настоящее время наблюдается интересный этап развития индустрии программного обеспечения, связанный с постоянно растущей значимостью программного обеспечения с открытым исходным кодом и тех средств совместной разработки кода, которые с ним связаны. Вкратце, процесс рефакторинга см. Многие специалисты в области обработки данных предпочитают придерживаться последовательного подхода к разработке программного обеспечения и часто продолжают утверждать, что до начала программирования должны быть созданы в той или иной форме детализированные логические и физические модели данных, которые должны быть взяты за основу. Значительное место уделено описанию того, как действовать в тех практических ситуациях, когда база данных уже существует, но плохо спроектирована, или когда реализация первоначального проекта базы данных не позволила получить качественную модель.
Книга Рефакторинг баз данных: эволюционное проектирование посвящена описанию процедур проектирования базы данных с точки зрения архитектора объектно-ориентированного программного обеспече- Стр. Но хуже всего то, что многие идейные руководители в сообществе специалистов по базам данных это люди, чье профессиональное становление произошло в 1970-х и 1980-х годах, но для них осталась незамеченной объектная революция, происшедшая в 1990-х годах, поэтому они не Стр. Прамод стал инициатором внедрения методов и процессов эволюционного проектирования и рефакторинга баз данных в 1999 году, работая над крупными приложением J2EE с использованием методологии экстремального программирования Extreme Programming - XP.
Рефакторинг баз данных: эволюционное проектирование - Очень важные главы 2 и 5.
Sadalage ADDISON-WESLEY Upper Saddle River, NJ Boston Indianapolis San Francisco New York Toronto Montreal London Munich Paris Madrid Capetown Sydney Tokio Singapore Mexico City title. Садаладж Москва Санкт-Петербург Киев 2007 title. Тригуб Перевод с английского и редакция К. С14 Рефакторинг баз данных: эволюционное проектирование. В настоящей книге приведены рекомендации, касающиеся того, как использовать методы рефакторинга для усовершенствования баз данных. Она посвящена описанию процедур проектирования базы данных с точки зрения архитектора объектноориентированного программного обеспечения, поэтому представляет интерес и для разработчиков прикладного кода, и для специалистов в области реляционных баз данных. В книгу включены многочисленные советы и рекомендации по улучшению качества проектирования базы данных. Значительное место уделено описанию того, как действовать в тех практических ситуациях, когда база данных уже существует, но плохо спроектирована, или когда реализация первоначального проекта базы данных не позволила получить качественную модель. Прежде всего книгу можно использовать в качестве технического руководства для разработчиков, непосредственно занятых на производстве. С другой стороны, она представляет собой теоретическую работу, стимулирующую дальнейшие исследования в направлении объединения объектноориентированного и реляционного подходов. ББК Все названия программных продуктов являются зарегистрированными торговыми марками соответствующих фирм. Никакая часть настоящего издания ни в каких целях не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами, будь то электронные или механические, включая фотокопирование и запись на магнитный носитель, если на это нет письменного разрешения издательства Addison-Wesley. Authorized translation from the English language edition published by Addison-Wesley, Copyright 2006 by Scott W. Ambler and Pramodkumar J. No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form, or by any means, electronic, mechanical, photocopying, recording, or otherwise, without the prior consent of the publisher. Издательский дом Вильямс, 2007 ISBN англ. Ambler and Pramodkumar J. Эволюционная разработка баз данных 31 Глава 2. Операции рефакторинга базы данных 45 Глава 3. Процесс рефакторинга базы данных 65 Глава 4. Развертывание на производстве 87 Глава 5. Операции рефакторинга базы данных 97 Глава 6. Операции рефакторинга структуры 109 Глава 7. Операции рефакторинга качества данных 183 Глава 8. Операции рефакторинга ссылочной целостности 229 Глава 9. Операции рефакторинга архитектуры 255 Глава 10. Операции рефакторинга методов 299 Глава 11. Преобразования 317 Приложение А. Обозначения языка моделирования данных UML 333 Приложение Б. Глоссарий 339 Приложение В. Литература 345 Приложение Г. Список операций рефакторинга и операций преобразования 347 Приложение Д. Отзывы 353 Предметный указатель 356 Стр. Эволюционная разработка баз данных Рефакторинг баз данных Эволюционное моделирование баз данных Регрессионное тестирование базы данных Управление конфигурациями артефактов базы данных Варианты среды, предназначенные для разработчиков Недостатки эволюционных методик разработки баз данных, препятствующие их внедрению Резюме 44 Глава 2. Операции рефакторинга базы данных Рефакторинг кода Рефакторинг баз данных Среда базы данных с одним приложением Среда базы данных с несколькими приложениями Сохранение семантики Категории операций рефакторинга базы данных Признаки нарушений в работе базы данных Перспективы дальнейшего распространения операций рефакторинга Возможности упрощения операций рефакторинга схемы базы данных Резюме 63 Глава 3. Процесс рефакторинга базы данных Проверка приемлемости рассматриваемой операции рефакторинга базы данных Выбор наиболее подходящей операции рефакторинга базы данных Обозначение как устаревшей исходной схемы базы данных Тестирование до выполнения, во время выполнения и после выполнения операции рефакторинга Проверка схемы базы данных Проверка результатов переноса данных Тестирование внешних программ доступа 76 Стр. Развертывание на производстве Эффективное развертывание с передачей из одной специализированной среды в другую Применение наборов операций рефакторинга базы данных Планирование подходящих интервалов развертывания Развертывание всей системы Удаление устаревшей схемы Резюме 96 Глава 5. Операции рефакторинга базы данных Преимущественное использование небольших изменений Однозначная идентификация отдельных операций рефакторинга Реализация крупных изменений в виде нескольких небольших изменений Применение таблицы конфигурации базы данных Преимущественное применение для синхронизации триггеров, а не представлений или пакетов Применение достаточно продолжительного переходного периода Упрощение стратегии группы контроля над внесением изменений в базу данных Упрощение процедуры согласования с другими группами Инкапсуляция средств доступа к базе данных Возможность легко настраивать среду базы данных Предотвращение дублирования кода SQL Перевод информационных активов базы данных под контроль процедур управления изменениями Учет необходимости перераспределения обязанностей в самой организации Резюме 107 Сетевые ресурсы 107 Глава 6. Операции рефакторинга структуры 109 Проблемы, часто возникающие при реализации операций рефакторинга структуры 110 Операция рефакторинга Удаление столбца 112 Обоснование 112 Потенциальные преимущества и недостатки 112 Процедура обновления схемы 113 Процедура переноса данных 114 Процедура обновления программ доступа 114 Операция рефакторинга Удаление таблицы 117 Обоснование 117 Потенциальные преимущества и недостатки 117 Процедура обновления схемы 117 Стр. Операции рефакторинга качества данных 183 Проблемы, часто возникающие при осуществлении операций рефакторинга качества данных 184 Операция рефакторинга Добавление поисковой таблицы 185 Стр. Операции рефакторинга ссылочной целостности 229 Операция рефакторинга Добавление ограничения внешнего ключа 229 Обоснование 230 Потенциальные преимущества и недостатки 230 Процедура обновления схемы 230 Процедура переноса данных 232 Процедура обновления программ доступа 233 Операция рефакторинга Добавление триггера для вычисляемого столбца 234 Обоснование 234 Потенциальные преимущества и недостатки 234 Процедура обновления схемы 236 Процедура переноса данных 237 Процедура обновления программ доступа 237 Операция рефакторинга Уничтожение ограничения внешнего ключа 238 Обоснование 238 Потенциальные преимущества и недостатки 238 Процедура обновления схемы 238 Процедура переноса данных 239 Процедура обновления программ доступа 239 Стр. Операции рефакторинга архитектуры 255 Операция рефакторинга Добавление методов CRUD 255 Обоснование 256 Потенциальные преимущества и недостатки 257 Процедура обновления схемы 257 Процедура переноса данных 258 Процедура обновления программ доступа 259 Операция рефакторинга Добавление зеркальной таблицы 259 Обоснование 259 Потенциальные преимущества и недостатки 260 Процедура обновления схемы 261 Процедура переноса данных 261 Процедура обновления программ доступа 263 Операция рефакторинга Добавление метода чтения 263 Обоснование 264 Потенциальные преимущества и недостатки 264 Процедура обновления схемы 265 Процедура переноса данных 266 Процедура обновления программ доступа 266 Операция рефакторинга Инкапсуляция таблицы в представление 266 Обоснование 267 Потенциальные преимущества и недостатки 267 Процедура обновления схемы 268 Процедура переноса данных 268 Стр. Операции рефакторинга методов Операции рефакторинга, которые приводят к изменению интерфейса 299 Операция рефакторинга Добавление параметра 300 Операция рефакторинга Параметризация метода 300 Операция рефакторинга Удаление параметра 301 Операция рефакторинга Переименование метода 302 Операция рефакторинга Переупорядочение параметров 302 Операция рефакторинга Замена параметра явно заданными методами Операции рефакторинга внутренней организации методов 305 Операция рефакторинга Консолидация условного выражения 305 Операция рефакторинга Декомпозиция условного выражения 306 Операция рефакторинга Извлечение метода 307 Операция рефакторинга Введение переменной 310 Операция рефакторинга Удаление флажка управления 311 Операция рефакторинга Удаление посредника 311 Операция рефакторинга Переименование параметра 312 Операция рефакторинга Замена подстановки литерала поиском в таблице 312 Операция рефакторинга Замена вложенного условного выражения защитными конструкциями 314 Операция рефакторинга Разбиение временной переменной 314 Операция рефакторинга Подстановка алгоритма 315 Глава 11. Преобразования 317 Преобразование Вставка данных 317 Обоснование 317 Потенциальные преимущества и недостатки 318 Процедура обновления схемы 319 Процедура переноса данных 319 Процедура обновления программ доступа 319 Преобразование Введение нового столбца 321 Обоснование 322 Потенциальные преимущества и недостатки 322 Процедура обновления схемы 322 Процедура переноса данных 322 Процедура обновления программ доступа 323 Преобразование Введение новой таблицы 323 Обоснование 324 Потенциальные преимущества и недостатки 324 Процедура обновления схемы 324 Процедура переноса данных 325 Процедура обновления программ доступа 325 Преобразование Введение представления 325 Обоснование 325 Потенциальные преимущества и недостатки 327 Процедура обновления схемы 327 Процедура переноса данных 327 Процедура обновления программ доступа 328 Преобразование Обновление данных 329 Стр. Обозначения языка моделирования данных UML 333 Приложение Б. Глоссарий 339 Приложение В. Литература 345 Приложение Г. Список операций рефакторинга и операций преобразования 347 Приложение Д. Отзывы 353 Предметный указатель 356 Стр. Скотт Посвящаю женщинам, которых я люблю больше всего, Рупали и нашей дочери Аруле. Эмблер --- консультант в области усовершенствования программных процессов Software Process Improvement --- SPI , проживающий недалеко от Торонто. Скотт создал методологии AM Agile Modeling www. Скотт работает в качестве редактора с правами публикации в коммерческом журнале Software Development www. Скотт закончил Университет Торонто, получив степень магистра информатики. В свободное время Скотт изучает стили каратэ --- годзюрю и кобудо. Садаладже --- консультант компании ThoughtWorks, которая занимается разработкой и интеграцией приложений для предприятия. Прамод стал инициатором внедрения методов и процессов эволюционного проектирования и рефакторинга баз данных в 1999 году, работая над крупными приложением J2EE с использованием методологии экстремального программирования Extreme Programming --- XP. С тех пор Прамод, принимая участие во многих проектах, неизменно применяет эти методы и процессы. Прамод охотно делится своми знаниями в области администрирования баз данных в эволюционных проектах, применения эволюционных процессов к базам данных и влияния эволюционных подходов на администрирование базы данных, и в письменном, и в устном виде, чтобы дать возможность всем желающим освоить эволюционные методы проектирования баз данных. Свое свободное время Прамод проводит с женой и дочерью, совершая прогулки и бегая трусцой. Десятилетие назад термин рефакторинг 1 был известен лишь ограниченному числу профессионалов, главным образом принадлежащих к сообществу пользователей языка Smalltalk. Но было очень интересно наблюдать за тем, как постепенно увеличивается количество желающих использовать рефакторинг в качестве формального и эффективного способа модификации работающего кода. В конечном итоге в наши дни многие рассматривают рефакторинг кода как важную составляющую разработки программного обеспечения. Сферой моей деятельности является разработка приложений для предприятий, причем значительная часть такой разработки связана с обеспечением взаимодействия с базами данных. Впервые выпустив книгу по рефакторингу, я отметил базы данных БД как основную проблемную область при проведении рефакторинга, поскольку при попытке применить операции рефакторинга к БД приходится сталкиваться с новым кругом проблем. Острота этих проблем усугубляется тем заслуживающим сожаления барьером, который обнаруживается в сфере разработки программного обеспечения для предприятий, поскольку специалисты в области баз данных и разработчики программного обеспечения отделены друг от друга стеной взаимного непонимания и недовольства. В работе Скотта и Прамода мне особенно понравилось то, что они стремятся каждый по-своему найти точки соприкосновения между этими категориями специалистов и объединить их усилия. Скотт неизменно пытается преодолеть указанный разрыв, подготавливая все новые и новые книги по базам данных, а написанное им по объектно-реляционному отображению оказало большое влияние на мои собственные сочинения, посвященные архитектуре приложений предприятия. Прамод, возможно, менее известен, но оказал на мои взгляды не меньшее влияние. Когда он начинал работу вместе со мной над одним проектом в компании ThoughtWorks, нам говорили, что проведение операций рефакторинга баз данных --- невыполнимая задача. Прамод не прислушался к этим предостережениям, взял за основу некоторые наметки идей и превратил их в формализованную программу, позволяющую привести схему базы данных в постоянное, но управляемое движение. Благодаря этому разработчики приложений также получили возможность использовать методы эволюционного проектирования в своем коде. С тех пор Прамод опробовал эти методы на предприятиях многих наших клиентов, распространил их среди наших коллег из компании ThoughtWorks, поэтому, по край- 1 Интересной аналогией, которая могла бы способствовать усвоению понятия рефакторинг, является то, что одно из толкований английского слова refactoring перестановка мест слагаемых. В этой книге сконцентрирован опыт двух человек, которые научились выживать на ничейной земле между приложениями и данными, а также приведены рекомендации, касающиеся того, как использовать методы рефакторинга для усовершенствования баз данных. Специалисты, знакомые с таким подходом, как рефакторинг, смогут отметить такую важную особенность описанных методов, что они позволяют обеспечить непрерывный перенос самих данных, а не только модификацию программ и структур данных. В этой книге показано, как достичь такой цели, и все, что в ней описано, подтверждается опытом проектирования и положительным, и отрицательным , который был накоплен этими двумя специалистами. Несмотря на то что я в восторге от появления этой книги, я также надеюсь, что это --- только первый шаг. Меня очень радует то, что после выхода в свет моей книги по рефакторингу появилось много новых сложных инструментальных средств, позволяющих автоматизировать значительную часть операций рефакторинга. Я надеюсь, что то же самое произойдет применительно к базам данных, и мы увидим, как поставщики инструментальных средств предлагают инструменты, позволяющие упростить задачу непрерывного переноса схемы и данных для каждого. Но прежде чем это произойдет, вы сможете воспользоваться данной книгой, чтобы создать собственные процессы и инструменты для упрощения своей работы, а в дальнейшем эта книга будет оставаться для вас ценным источником знаний, позволяющим успешно использовать указанные инструментальные средства рефакторинга баз данных. Мартин Фаулер, редактор серии; руководитель исследовательских работ компании ThoughtWorks С того времени, когда я начал свою карьеру в области разработки программного обеспечения, изменились до неузнаваемости многие аспекты производства и технологии. Но не изменилось одно --- фундаментальный характер разработки программного обеспечения. Задача создания хотя бы какого-то программного обеспечения никогда не была особенно сложной --- достаточно лишь получить в свое распоряжение компьютер и начать выдавать на-гора код. Но создать хорошее программное обеспечение всегда было трудно, и тем более было очень нелегко разработать превосходное программное обеспечение. Эта ситуация не изменилась и сегодня. В наши дни стало удобнее создавать все более крупные и сложные программные системы, собирая воедино фрагменты программ, полученных из различных источников, возможности инструментальных средств разработки программного обеспечения еще больше расширились, и мы гораздо лучше стали разбираться в том, какие подходы к осуществлению процесса разработки программного обеспечения принесут или не принесут результаты. Тем не менее основная часть программного обеспечения все еще продолжает оставаться ненадежной, а борьба за достижение допустимых уровней качества кажется нескончаемой. Возможно, причиной такого положения дел является то, что создаваемые системы становятся все крупнее и сложнее, или, возможно, то, что в используемых методиках все еще не преодолены какие-то фундаментальные недостатки. К счастью, время от времени появляются новые технологии и методики, внушающие надежду. Среди этих достижений редко встречаются новинки, которые позволяли бы резко повысить нашу способность реализовать тот потенциал, который внушал нам надежду при запуске большинства проектов. Методы, применяемые в рефакторинге, наряду со связанными с ними адаптивными методологиями, относятся именно к таким редкостным достижениям. Работа, результаты которой изложены в этой книге, расширяют возможности появления перспективных технологических достижений в очень важном направлении. Рефакторинг это контролируемый метод безопасного улучшения проекта кода без изменения его функциональной семантики. Возможность добиться усовершенствования кода дана любому разработчику, но подход, основанный на проведении рефакторинга, предусматривает применение формального метода безопасного внесения изменений с помощью тестов и распространение полученных при этом знаний, накопленных сообществом по разработке программного обеспечения в виде формальных определений операций рефакторинга. С того времени, как была издана оригинальная книга Фаулера по этой теме, нашли широкое распространение операции рефакторинга и были приняты на вооружение инструментальные средства, позволяющие обнаружить потенциальные возможности проведения операций рефакторинга и применить эти операции к коду. Но применительно к тому уровню в многоуровневой структуре приложений, на котором используются данные, оказалось, что проведение операций рефакторинга является намного более затруднительным. Как показано в этой книге, связанные с этим проблемы отчасти обусловлены применением сложившихся ранее подходов, но не менее важно то, что еще не был четко определен процесс и набор операций рефакторинга, применимых к уровню данных. Этот фактор действительно оказывал неблагоприятное воздействие, поскольку низкое качество проекта на уровне данных почти всегда становится причиной возникновения проблем на более высоких уровнях, как правило, вызывая применение целого ряда неудачных проектных решений, принятых для осуществления бесполезных усилий стабилизировать шаткий фундамент. Более того, невозможность обеспечить развитие уровня данных, то ли из-за отрицания необходимости в этом, то ли из-за страха перед изменениями, препятствует реализации способностей всех остальных участников разработки создать наилучшее возможное программное обеспечение. Работа, проделанная авторами, столь важна потому, что позволяет решить именно эти проблемы; мы теперь имеем организационные и технологические возможности итеративного внесения усовершенствований в проекты, применяемые в этой жизненно важной области. Меня очень обрадовало появление данной книги, и я надеюсь, что она станет стимулом к созданию инструментальных средств поддержки описанных в ней методик. В настоящее время наблюдается интересный этап развития индустрии программного обеспечения, связанный с постоянно растущей значимостью программного обеспечения с открытым исходным кодом и тех средств совместной разработки кода, которые с ним связаны. Такие проекты, как Eclipse Data Tools Platform, становятся естественным центром притяжения для всех тех разработчи- Стр. Я надеюсь, что сообщество программистов, участвующих в разработках с открытым исходным кодом, внесет свой вклад в реализацию этого замысла, поскольку потенциальный выигрыш очень велик. Разработка программного обеспечения перейдет на качественно новый уровень, после того как операции рефакторинга базы данных станут такими же распространенными и широко применяемыми, как и обычные операции рефакторинга. Джон Грэм John Graham , компания Eclipse Data Tools Platform, руководитель проекта, председатель комитета, старший инженер по кадрам, компания Sybase, Inc. Сообщество специалистов в области обработки данных во многом осталось в стороне от тех ярких достижений, которые стали результатом внедрения адаптивных методов разработки программного обеспечения. Безусловно, разработчики приложений приняли на вооружение подход, предусматривающий применение рефакторинга, проведение разработки на основе тестирования и других подобных методов, позволяющий повысить производительность разработки программного обеспечения и достичь других существенных преимуществ, а специалисты в области обработки данных в основном проигнорировали эти тенденции и даже отстранились от них. Это стало для меня очевидно в самом начале моей карьеры в качестве разработчика приложений в крупном учреждении, предоставляющем финансовые услуги. В то время кабинка, в которой находилось мое рабочее место, располагалась непосредственно между территориями, занимаемыми группой разработчиков и группой специалистов по базам данных. Мне не потребовалось много времени, чтобы понять, что эти две группы, расстояние между рабочими местами которых не превышало нескольких метров, весьма различаются по своим подходам, методам и применяемым ими процессам. Поступление любого запроса клиента в группу разработчиков влекло за собой проведение определенного рефакторинга, осуществление входного контроля кода и выполнение всеобъемлющего приемочного тестирования. А при поступлении аналогичного запроса в группу специалистов по базам данных происходил запуск формального процесса утверждения изменений, который требовал прохождения через несколько уровней организационной структуры еще до того, как могла начаться модификация схемы. Такой процесс был чрезвычайно трудоемким и неизбежно вызывал раздражение и разработчиков, и клиентов, но оставался в прежнем виде, поскольку группа специалистов по базам данных не знала какого-либо иного пути. Но им приходится искать другой путь, если они хотят, чтобы их деловое предприятие смогло выжить в современной обстановке, характеризующейся постоянным обострением конкурентной борьбы. В частности, сообщество специалистов по базам данных должно найти какой-то способ овладения адаптивными методами, которые применяют их коллеги-разработчики. Книга Рефакторинг баз данных: эволюционное проектирование --- это бесценный источник информации, который показывает специалистам в области обработки данных, как именно они могут освоить новые методы и приступить к уверенному, безо- Стр. В своей книге Скотт и Прамод показали, как усовершенствовать проект с помощью небольших, итеративных операций рефакторинга, позволяющих администратору базы данных, используя адаптивные методы, избежать ошибок, неизменно возникающих при осуществлении крупных, заранее подготовленных проектов, и обеспечить развитие схемы наряду с приложением, по мере того, как будет постепенно достигаться лучшее понимание требований клиента. Но не следует заблуждаться --- задача проведения рефакторинга баз данных остается сложной. Даже такое простое изменение, как переименование столбца, каскадно распространяется по всей схеме, влияя на объекты схемы, инфраструктуры доступа к базе данных и прикладной уровень, поэтому администраторы базы данных стремятся избегать любых изменений. В книге Рефакторинг баз данных: эволюционное проектирование приведено описание набора рекомендуемых методов, которое позволяет профессиональному администратору базы данных подробно узнать о том, как перенести адаптивные методы в среду проектирования и разработки баз данных. Скотт и Прамод уделяют внимание мельчайшим подробностям того, что нужно сделать, чтобы фактически реализовать каждую методику рефакторинга базы данных, демонстрируя осуществимость операций рефакторинга и открывая путь к их широкому распространению. Это может послужить призывом к действию для всех специалистов в области обработки данных. Изучайте эти методы, берите их на вооружение и делитесь своим опытом с коллегами. Рефакторинг баз данных --- это ключ к внедрению адаптивных методик в проблемной области обработки данных. Сакин Рекхи Sachin Rekhi , руководитель программы, Microsoft Corporation Разработчики, участвующие в создании прикладного программного обеспечения, руководствуются двумя основными подходами: разработчики приложений главным образом используют объектно-ориентированные ОО средства, широко применяют язык Java и адаптивные методы разработки программного обеспечения, а специалисты в области реляционных баз данных прежде всего стремятся провести всесторонний технический анализ и создать надежный проект реляционной базы данных. Эти две категории специалистов используют разные языки программирования, посещают разные конференции, и даже, кажется, почти не поддерживают отношения друг с другом. Такие взаимоотношения между специалистами обнаруживаются в отделах информационной технологии многих организаций. Разработчики объектно-ориентированного программного обеспечения жалуются, что администраторы баз данных --- закоренелые консерваторы, неспособные успевать за быстрыми темпами изменений. А специалисты в области баз данных безнадежно машут рукой, вспоминая примитивные ошибки разработчиков программ на языке Java, не имеющих ни малейшего представления о том, что делать с базой данных. Скотт Эмблер и Прамод Садаладже принадлежат к той редкой группе людей, которые способны указать путь к объединению усилий всех категорий специалистов в области программирования. Книга Рефакторинг баз данных: эволюционное проектирование посвящена описанию процедур проектирования базы данных с точки зрения архитектора объектно-ориентированного программного обеспече- Стр. Поэтому настоящая книга представляет ценность и для разработчиков объектно-ориентированного программного обеспечения, и для специалистов в области реляционных баз данных. Она поможет разработчикам объектно-ориентированного программного обеспечения научиться применять адаптивные методы рефакторинга кода для работы с базами данных, а также позволит специалистам в области реляционных баз данных получить представление о том, как осуществляется создание объектно-ориентированного программного обеспечения. В книгу включены многочисленные советы и рекомендации по улучшению качества проектирования базы данных. Она в основном сосредоточена на описании того, как действовать в тех практических ситуациях, когда база данных уже существует, но плохо спроектирована, или когда реализация первоначального проекта базы данных не позволила получить качественную модель. Эта книга обречена на успех, поскольку в ней удалось достичь сразу нескольких целей. Прежде всего ее можно использовать в качестве технического руководства для разработчиков, непосредственно занятых на производстве. С другой стороны, эта книга представляет собой теоретическую работу, стимулирующую дальнейшие исследования в направлении объединения объектно-ориентированного и реляционного подходов. Я хотел бы, чтобы системные архитекторы прислушались к призывам Эмблера и Садаладже признать, что базы данных могут трактоваться гораздо шире, чем просто место для хранения перманентных копий классов. Д-р Пол Дорси Paul Dorsey , президент компании Dulcian, Inc. Чтобы было проще понять особенности этих методов, подчеркнем, что эволюционный метод по своему характеру является и итеративным, и инкрементным, а адаптивный подход является эволюционным и вместе с тем характеризуется высокой степенью взаимодействия участников разработки. Кроме того, в организациях, применяющих информационные технологии, все шире внедряются такие адаптивные методики, как рефакторинг, программирование в паре, разработка на основе тестирования Test-Driven Development --- TDD и адаптивное проектирование на основе модели Agile Model- Driven Development --- AMDD. Эти подходы и методики были разработаны и получили свое развитие в течение многих лет в среде рядовых разработчиков и доведены до совершенства обычными программистами, а не придуманы теоретиками, живущими в башнях из слоновой кости. Короче говоря, эти эволюционные и адаптивные методики, повидимому, невероятно успешно действуют на практике. В своей оригинальной книге Refactoring Мартин Фаулер дал определение рефакторинга как небольшого изменения в исходном коде, которое способствует улучшению проекта кода без изменения его семантики. Иными словами, рефакторинг --- это улучшение качества сделанной вами работы без нарушения или добавления чего-либо. Кроме того, в своей книге Мартин обсуждает идею, что если возможно подвергнуть рефакторингу прикладной исходный код, то есть возможность подвергнуть рефакторингу схему базы данных. Но Мартин указал, что рефакторинг баз данных --- очень сложная задача, поскольку базы данных отличаются высокой степенью связности; поэтому он решил исключить эту тематику из своей книги. После публикации книги Refactoring в 1999 году оба автора настоящей книги стали искать способы проведения рефакторинга схем базы данных. Первоначально мы работали отдельно, встречаясь друг с другом на таких конференциях, как Software Development www. Поэтому мы объединили свои усилия в написании настоящей книги, чтобы поделиться своим опытом и рассказать о методах развития схем баз данных путем проведения операций рефакторинга. Все примеры, приведенные в книге, написаны на языке Java и на языках баз данных Oracle. Практически каждое описание операции рефакторинга базы данных включает код, предназначенный для модификации непосредственно самой схемы базы данных, а Стр. Безусловно, нельзя найти две базы данных, которые были бы неотличимыми друг от друга, поэтому мы включили описания альтернативных стратегий реализации в тех случаях, когда между программными продуктами баз данных имеются тонкие, но важные различия. В некоторых случаях мы обсуждаем альтернативные реализации каких-то аспектов рефакторинга с помощью таких характерных для СУБД Oracle средств, как команды SET UNUSED или RENAME TO, а во многих приведенных нами примерах кода используются средства COMMENT ON, предусмотренное в СУБД Oracle. В других программных продуктах баз данных предусмотрены другие средства, позволяющие упростить рефакторинг баз данных, и хороший администратор базы данных должен знать, как воспользоваться этими особенностями в своих интересах. Но лучше всего, если в будущем появятся инструментальные средства рефакторинга баз данных, которые могли бы выполнять всю эту работу за нас. Кроме того, мы стремились показать настолько простой код Java, чтобы можно было преобразовать его в код C , C++ или даже Visual Basic практически без затруднений. Необходимость в осуществлении эволюционной разработки баз данных Настало такое время, что эволюционные подходы к разработке баз данных должны выйти на передний план. Это означает, что схема базы данных не должна полностью проектироваться заранее еще до начала проекта; вместо этого схема наращивается на протяжении всего периода осуществления проекта, отражая изменения в требованиях, которые выдвигают лица, заинтересованные в разработке проекта. Нравится нам это или нет, но по мере развития проекта требования изменяются. В традиционных подходах принято отрицать эту фундаментальную истину и пытаться управлять изменениями ; термин управление изменениями, кроме прочих отрицательных оттенков, несет смысл --- создание препятствий для изменений. Вместо этого специалисты, непосредственно использующие современные методы разработки, решили принять потребность в изменениях как должное и взять на вооружение методы, позволяющие им совершенствовать плоды своего труда настолько оперативно, насколько это согласуется с расширяющимися требованиями. Программисты стали руководствоваться такими методами, как TDD, рефакторинг и AMDD, а также создали новые инструментальные средства разработки, чтобы упростить использование этих методов. Достигнув этой цели, специалисты в области программного обеспечения осознали, что нужны также методы и инструментальные средства для поддержки эволюционной разработки баз данных. Преимущества эволюционного подхода к разработке баз данных включают следующее. Эволюционный, своевременный Just-In- Time JIT подход позволяет исключить издержки, которые неизбежно возникают при использовании последовательных методов в случае изменения требований. Все инвестиции, заблаговременно вложенные в подготовку детализированных требований, создание архитектуры и проектирование артефактов, становятся напрасно потерянными, если в дальнейшем обнаруживается, что требование, ради выполнения которого были сделаны эти затраты, больше не выдвигается. Ведь если ваша квалификация позволяет сделать работу заранее, то, Стр. Предотвращение необходимости в существенных переделках. Как будет показано в главе 1 Эволюционная разработка базы данных, все равно должно быть заранее проведено некоторое заблаговременное начальное проектирование, позволяющее продумать наперед основные проблемы и выяснить, какие сложности могли бы потенциально привести к существенным переработкам при их обнаружении на более поздних этапах проекта; не нужно лишь предварительно изучать мельчайшие подробности. Постоянная уверенность в наличии работоспособной системы. Эволюционный подход позволяет регулярно выпускать рабочее программное обеспечение даже если его развертывание осуществляется только в демонстрационной среде , которое всегда может быть передано в эксплуатацию. Если в вашем распоряжении каждый раз через одну-две недели оказывается новая, работоспособная версия системы, риск неудачного завершения проекта резко уменьшается. Постоянная уверенность в том, что существующий на данный момент проект базы данных имеет наивысшее возможное качество. Именно в этом состоит вся суть подхода, основанного на проведении рефакторинга баз данных: усовершенствование проекта схемы на основе постепенно осуществляемых небольших изменений. Применение подхода к разработке, совместимого с подходом других разработчиков. Разработчики программного обеспечения руководствуются эволюционным подходом, и если специалисты в области обработки данных хотят стать равноправными членами современных групп разработчиков, они также должны выбрать для своей работы один из эволюционных методов. Применяя в своей производственной деятельности эволюционный подход, вы выполняете только ту работу, которая фактически нужна сегодня, и ни на йоту больше. Тем не менее при проведении разработки базы данных на основе эволюционных методов необходимо учитывать некоторые возникающие при этом сложности, которые описаны ниже. Наличие разных подходов у различных категорий разработчиков. Многие специалисты в области обработки данных предпочитают придерживаться последовательного подхода к разработке программного обеспечения и часто продолжают утверждать, что до начала программирования должны быть созданы в той или иной форме детализированные логические и физические модели данных, которые должны быть взяты за основу. После перехода к использованию современных методологий приходится отказываться от этого подхода, который теперь рассматривается как слишком неэффективный и рискованный; в связи с этим многие специалисты в области обработки данных чувствуют себя растерянными. Но хуже всего то, что многие идейные руководители в сообществе специалистов по базам данных это люди, чье профессиональное становление произошло в 1970-х и 1980-х годах, но для них осталась незамеченной объектная революция, происшедшая в 1990-х годах, поэтому они не Стр. Мир изменился, но эта категория людей, по-видимому, не хочет изменяться вместе с ним. Как описано в данной книге, специалисты в области обработки данных не только имеют возможность организовать свою работу по-новому, на основе эволюционных или даже адаптивных методов, но и сами эти методы фактически являются предпочтительным способом организации работы. Для изучения описанных в данной книге методов потребуется время, но еще больше времени займет полная перестройка сложившихся последовательных подходов и переход к использованию эволюционных подходов. Отсутствие полностью сложившихся инструментальных средств поддержки. Ко времени публикации книги Refactoring в 1999 году отсутствовали какие-либо инструментальные средства, поддерживающие эту методику. Но всего лишь через несколько лет в каждой отдельной интегрированной среде разработки Integrated Development Environment IDE появились непосредственно встроенные функции рефакторинга кода. Ко времени написания этой книги также не существовали какие-либо инструментальные средства рефакторинга баз данных, но авторы фактически включили весь код, необходимый для реализации операций рефакторинга вручную. К счастью, в проспекте проектов Eclipse Data Tools Project DTP указано на необходимость разработки функциональных средств рефакторинга баз данных в составе интегрированной среды разработки Eclipse, поэтому остается лишь дождаться того, что поставщики инструментальных средств подхватят это начинание. Суть адаптивных методов Безусловно, данная книга не посвящена непосредственно адаптивной разработке программного обеспечения, но нельзя отрицать того факта, что основным методом для разработчиков, руководствующихся адаптивным подходом, должен стать рефакторинг баз данных. Процесс рассматривается как адаптивный, если он соответствует четырем критериям, разработанным организацией Agile Alliance www. Эти критерии определяют предпочтения, а не альтернативы, побуждая стремление сосредоточиваться на определенных областях, но не исключать другие. Иными словами, если для вас представляют ценность одни сравниваемые концепции, то вы должны еще больше ценить другие концепции, рассматриваемые в сравнении. Например, нельзя отрицать важность процессов и инструментальных средств, но индивидуумы и способы взаимодействия между ними еще важнее. Четыре адаптивных критерия описаны ниже. Индивидуумы и способы их взаимодействия ВАЖНЕЕ процессов и инструментальных средств. Наиболее важными аспектами, требующими размышлений, является то, какие люди участвуют в разработках и как они взаимодействуют. Если вам не удастся добиться успехов в этой сфере, то лучшие инструментальные средства и процессы окажутся бесполезными. Работоспособное программное обеспечение ВАЖНЕЕ всеобъемлющей документации. Основная цель разработки программного обеспечения состоит в создании работоспособного программного обеспечения, которое отвечает требованиям Стр.