Juneau - новая среда разработки баз данных
Статья устарела
Данная статья была написана 22 сентября 2011 года и на текущий момент уже неактуальна. Juneau давно превратился в SQL Server Data Tools.
В 2012 году ожидается выпуск очередной версии Microsoft SQL Server под кодовым названием Denali. В ее составе появится и новая среда разработки баз данных - Juneau, полное название – Sql Server Developer Tools. Инструмент унаследовал функционал трех существующих сегодня продуктов: Management Studio (SSMS), Visual Studio for database professional’s (VSDB) и Business Intelligence Development Studio (BIDS). Помимо этого, в нем будут реализованы и новые возможности, облегчающие разработку приложений, активно использующих базы данных.
В данной статье представлен небольшой обзор Juneau той версии, которая доступна на текущий момент – в составе предварительного выпуска SQL Server Denali – CTP3. Также в конце будет приведен ожидаемый список возможностей, которые будут предоставлены в релизе.
Сегодняшние трудности при разработке баз данных
С существующими сегодня стандартными инструментами разработка приложений, активно использующих базы данных, может являться непростым и зачастую рутинным процессом. В частности, приходится сталкиваться со следующими проблемами:
- Создание таблицы (CREATE) выполняется, как правило, всего один раз. После этого происходит наполнение таблицы данными. Дальнейшие модификации сводятся к командам ALTER, которым нужно уделять много времени, чтобы не испортить существующие в таблицах данные.
- Рефакторинг существующих таблиц становится рутинной задачей из-за множества связей и ссылок. Например, переименование колонки потребует переименования всех ссылок на нее в хранимых процедурах, представлениях и т.п. Кроме того, из-за отсутствия синтаксического анализатора в составе среды разработки, не представляется возможным достоверно убедиться, что ссылки были исправлены везде, где нужно. Это может привести к позднему обнаружению ошибки.
- Тяжело синхронизировать базы данных реально работающего приложения и доработанной версии. При доработке приложения разработчик, как правило, осуществляет тестирование на своей локальной версии базы данных. После того, как изменения считаются завершенными, возникает задача обновления структуры базы данных в реально работающем приложении. Эта задача опять сводится к написанию множества ALTER-ов. В случае, если где-то закрадется ошибка, на исправление ее последствий может потребоваться значительное время.
- Трудно поддерживать разные версии SQL Server. Синтаксис у версий 2005, 2008 и Azure незначительно, но отличается. Это приводит к необходимости фокусироваться на одной определенной версии, а в случае ее смены придется потратить много времени на поиск и исправление несовместимостей.
Общая информация
Среди основных новых возможностей, представленных в Juneau CTP3, отметим следующие:
- Полная интеграция с Visual Studio;
- Разработка структур данных на основе модели (подобно тому, как это делается в Entity Framework);
- Поддержка рефакторинга (переименование, поиск ссылок и т.п.) для SQL;
- Встроенная локальная база данных для упрощенной отладки приложений (аналогично встроенному IIS, появившемуся в VS 2005);
- Публикация изменений как в новую, так и в существующую базу данных, «в один клик»;
Интеграция с Visual Studio
Juneau основана на Visual Studio 2010. Если эта среда разработки уже установлена, то Juneau просто интегрируется в нее, а если нет, то автоматически устанавливается оболочка VS2010, но без редакторов основных .Net-языков.
Основная работа с существующими базами данных осуществляется через стандартную вкладку Server Explorer, которая, тем не менее, существенно доработана. Теперь ее интерфейс очень похож на Management Studio:

Таким образом, теперь можно работать с базой данной в той же среде разработки, не переключаясь в отдельное приложение. С помощью опции View Code можно посмотреть структуру таблицы в форме SQL-запроса CREATE:

Как и в Management Studio, нам доступна подсказка Intellisence. В Juneau она была доработана, но в основном изменения коснулись «отшлифовки» механизма работы.
Опция View Designer позволяет видеть структуру с помощью привычного интерфейса, который так же был обновлен:

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

Можно либо посмотреть синтаксис запросов, которые сгенерировала Juneau, нажав кнопку Generate Script, либо сразу отправить их в базу нажатием на Update Database.
Разработка структур данных на основе модели
При разработке слоя базы данных в приложениях теперь можно использовать Database Project:

Проект предназначен для описания всех сущностей базы данных, которые используются в приложении. Предполагается, что сначала разрабатывается модель данных, подобно Entity Framework, которая затем автоматически транслируется в реальную базу данных самой средой разработки. При трансляции можно будет выбрать версию сервера баз данных (2005, 2008, Azure).
Для примера создадим таблицу:


Поддержка рефакторинга
В поле, где показываются SQL-запросы, мы можем пользоваться возможностями рефакторинга, которые ранее были доступны только для .Net языков. Например, можно найти все ссылки на таблицу или поле:


Можно, например, воспользоваться инструментами рефакторинга и переименовать таблицу:

Среда разработки автоматически отследит все ссылки на данную таблицу и переименует их.
Стоит отметить, что эти опции работают только внутри проекта. Выполнить подобный поиск по реальной базе нельзя.
Встроенная база данных
Теперь мы можем «запустить» проект, подобно тому, как мы запускаем проекты на C# и других языках – с помощью клавиши F5 (или Ctrl+F5). Juneau показывает процесс сборки проекта:

В этом заключается одна из главных новых «фишек» Juneau. «Запуск проекта» означает то, что наша таблица была создана в базе данных. Особенность в том, что была запущена внутренняя, локальная база данных и именно в ней были выполнены все действия. Ее можно увидеть в Server Explorer:

Как вы можете видеть, была создана локальная база данных Database4 с таблицей Item. Работать с этой базой можно так же, как и с «настоящим» SQL Server-ом. Но локальная база данных не запускается в виде службы – она работает только тогда, когда у вас открыт проект в Visual Studio. Тем не менее, все введенные в нее данные сохраняются и после закрытия проекта – в локальном файле.
Версию SQL-диалекта (2005, 2008 или Azure) можно выбирать в свойствах проекта.
Подобное нововведение было и в 2005-й Visual Studio, только тогда оно касалось веб-сервера IIS. В предыдущей, 2003-й версии, его не было, и разработчикам ASP.Net-приложений приходилось каждый раз самостоятельно разворачивать проект на реальном IIS, что доставляло множество неудобств.
Мы можем наполнить таблицу данными:

Предположим, нам понадобилось изменить структуру таблицы, например, добавить новую колонку. Здесь возможно два варианта:
- Если изменения могут быть применены без потери данных, то они будут применены, причем ALTER-скрипт среда разработки создаст и запустит сама.
- Если изменения могут затронуть данные (например, удаление колонки) или просто не смогут быть применены (например, создание колонки не NULL невозможно без ввода данных или значения по умолчанию), то запуск проекта завершится ошибкой. Например, такое сообщение выдается после удаления колонки: Warning: SQL72015: The column [dbo].[Item].[qweq] is being dropped, data loss could occur. Error: SQL72014: .Net SqlClient Data Provider: Msg 50000, Level 16, State 127, Line 6 Rows were detected. The schema update is terminating because data loss might occur. An error occurred while the batch was being executed. На данный момент Juneau еще не отслеживает, будет ли реальная потеря данных или нет. Например, если создать колонку с возможностью NULL, заполнить ее данными, а затем попытаться сделать ее не NULL, то запуск все равно завершится с ошибкой. Выход здесь пока следующий: поставить в свойствах проекта галочку «Always recreate database». Но это обернется нам потерей всех данных при перекомпиляции проекта.
Развертывание в реальную базу данных
Предположим, что мы завершили разработку и отладку и теперь хотим развернуть проект на реальной базе данных. Для этого по правому клику на проекте выбираем опцию Publish:

В появившемся окне выбираем базу данных, в которую будем вносить изменения.

Можно настроить процесс публикации, кликнув на кнопку Advanced.
Дальнейшие действия возможны в двух вариантах:
- Если мы предварительно хотим посмотреть SQL-команды, которые будут отправлены на сервер баз данных, то нажимаем кнопку «Generate script». В новом окне будет полностью показан сценарий.
- Если мы хотим сразу отправить изменения на сервер, то нажимаем «Publish». Если мы развертываем изменения уже не в первый раз, то Juneau автоматически создает нужные ALTER-запросы и «подтягивает» структуру существующих таблиц. При этом действуют те же ограничения, что и при модификации локальной базы данных.

Теперь у нас есть «рассинхронизация»: в реальной базе есть новая колонка, а в проекте ее нет. Для того, чтобы синхронизировать изменения, воспользуемся инструментом Schema Compare. Он и раньше был встроен в Visual Studio, но с приходом Juneau его интерфейс был доработан. Запускаем процесс синхронизации изменений:

В появившемся окне слева указываем исходную базу данных, справа – «пункт назначения» - в данном случае им является наш проект:

Некоторое время среда разработки анализирует изменения и затем отображает их:

Показано, что появилась новая колонка. Осталось лишь нажать на кнопку Update Target, чтобы обновить наш проект.
Планы на будущее
Некоторые возможности были продемонстрированы на конференциях Microsoft, но не включены в CTP3. Среди них:
- Автоматическая связь между проектом (Database Project) и Entity Framework. Например, при добавлении нового поля в модель EF это же поле добавится и в проекте базы данных, и наоборот;
- Возможность построения контрольных точек (checkpoints). В какой-то момент (например, при выпуске первой версии) можно создать т.н. чекпоинт. При выпуске следующей версии среда разработки сможет вычислить изменения между последней версией и чекпоинтом и автоматически создать ALTER-скрипт;
- Кросс-уровневая отладка. Благодаря интеграции SSMS и VS при отладке можно прямо из C# (или другого) кода попадать в код SQL-запросов (например, хранимых процедур) с полными возможностями отслеживания переменных и т.п.
- Возможно – модульное и нагрузочное тестирование;