Я занимался тем, как структурировать ответ на этот вопрос, так как это было первоначально отправлено. Это сложно, так как в случае VS2010 речь идет не об описании функций и преимуществ инструмента. Речь идет о том, чтобы убедить читателя сделать фундаментальный сдвиг в их подходе к разработке баз данных. Не просто.
На этот вопрос есть ответы от опытных специалистов по базам данных, с фоновым сочетанием, охватывающим DBA, developer / dba, а также OLTP и хранилище данных. Мне нецелесообразно подходить к этому для каждого аспекта разработки базы данных за один раз, поэтому я попытаюсь обосновать конкретный сценарий.
Если ваш проект соответствует этим критериям, я думаю, что для VS2010 есть веские аргументы:
- Ваша команда использует VS2010 для разработки приложений.
- Ваша команда использует TFS для контроля версий и управления сборкой.
- Ваша база данных - SQL Server.
- Ваша команда уже прошла или заинтересована в автоматическом тестировании VS.
Если вы оцениваете VS2010 для разработки баз данных, вашей библией будет Руководство по базам данных Visual Studio от Visual Studio ALM Rangers . Все последующие цитаты, на которые нет ссылок, будут взяты из этого документа.
Пошли тогда ...
Почему процесс разработки баз данных отличается от разработки приложений?
Данные. Если бы не эти неприятные данные, разработка баз данных была бы пустяком. Мы могли бы просто СОБРАТЬ все на каждом выпуске и забыть об этом хлопотном управлении изменениями.
Наличие данных усложняет процесс изменения базы данных, поскольку данные часто переносятся, преобразуются или перезагружаются, когда изменения вносятся усилиями по разработке приложений, которые влияют на форму таблиц базы данных или других схем данных. На протяжении всего процесса изменений данные о качестве продукции и рабочее состояние должны быть защищены от изменений, которые могут поставить под угрозу ее целостность, ценность и полезность для организации.
Что не так с SSMS?
Это называется SQL Server Management Studio по причине. В качестве отдельного инструмента нецелесообразно управлять своими усилиями по разработке, если вы собираетесь следовать принятым передовым методам.
Только с помощью сценариев, чтобы осмысленно применять установленные методы контроля версий к вашей разработке, вам придется поддерживать как определения объектов (например, сценарий CREATE TABLE), так и сценарии изменения (например, ALTER TABLE) И усердно работать над тем, чтобы они оставались синхронизированными.
Цепочка версий для внесения изменений в таблицу довольно быстро сходит с ума. Очень упрощенный пример:
-- Version 1
CREATE TABLE dbo.Widget (WidgetId INT, Name VARCHAR(20))
-- Version 2
CREATE TABLE dbo.Widget (WidgetId INT, Name VARCHAR(20), Description VARCHAR(50))
-- Version 3
CREATE TABLE dbo.Widget (WidgetId INT, Name VARCHAR(20), Description VARCHAR(100))
В версии 3 скрипт изменения базы данных содержит:
ALTER TABLE dbo.Widget ADD Description VARCHAR(50)
ALTER TABLE dbo.Widget ALTER COLUMN Description VARCHAR(100)
Если оперативная версия этой базы данных - версия 1, а наш следующий выпуск - версия 3, сценарий ниже будет всем необходимым, но вместо этого будут выполняться оба оператора ALTER.
ALTER TABLE dbo.Widget ADD Description VARCHAR(100)
Спринты в течение 5 лет и 4 недель дополняют некоторые развлекательные сценарии версий и требуют дополнительной обработки человеком, чтобы минимизировать влияние на время развертывания.
Так что-нибудь не так с SSMS? Нет, это хорошо для того, для чего это хорошо, для администрирования и управления SQL Server. Чего он даже не притворяется, так это помощи разработчику базы данных в (иногда) очень сложной задаче управления изменениями.
Если вы не можете собрать каждую версию базы данных из исходного кода и обновить ее до любой будущей версии, ваш исходный контроль нарушен. Если вы так не думаете, спросите Эрика Синка .
А как насчет SSMS + <- вставить инструмент сравнения схем ->?
Это определенно шаг в правильном направлении и отнимает много ручного труда, необходимого для поддержки сценариев. Но (и это большое но), как правило, это ручные шаги.
Популярные инструменты сравнения схем могут быть полностью автоматизированы и интегрированы в процесс сборки. Тем не менее, по моему опыту, более распространенной практикой является сравнение вручную, в результате чего получаются сценарии с проверкой на глаз, возвращаются в систему контроля версий, а затем выполняются вручную для развертывания. Не хорошо.
Каждый раз, когда мы ошибаемся, люди должны быть вовлечены в процесс сборки или развертывания, мы вводим риск и делаем процесс неповторимым.
Если вы и ваша команда одни из немногих, кто имеет полностью автоматизированное сравнение и развертывание схем, снимаю шляпу перед вами! Ребята, вы, скорее всего, будете открыты для преимуществ, которые VS2010 может предложить:
- Вы уже приняли, что ручные шаги опасны.
- Вы видите ценность автоматизации.
- Вы готовы потратить время, необходимое для его работы.
Если вы не можете создать сборку за один шаг или развернуть ее за один шаг, процесс разработки и развертывания нарушен. Если вы так не думаете, спросите Джоэла Спольски .
Почему VS2010?
Вопрос, который поставил @NickChammas, - поиск потрясающих функций, демонстрирующих, почему VS2010 меняет правила игры при разработке баз данных. Я не думаю, что смогу обосновать это основанием.
Возможно, комично, где другие видят недостатки в этом инструменте, я вижу веские причины для принятия:
- Вам придется изменить свой подход.
- Вы и ваша команда будете вынуждены работать по-другому.
- Вам придется оценить влияние каждого изменения, подробно, подробно.
- Вы будете направлены на то, чтобы сделать каждое изменение идемпотентным .
Если вы являетесь единственным администратором базы данных в проекте и управляете всеми изменениями в базе данных, это рассуждение должно звучать нелепо, граничащее с абсурдом. Однако, если вы считаете, что @BrentOzar имеет смысл, и одно из новых правил заключается в том, что каждый является администратором базы данных , вам нужно будет контролировать изменение базы данных так, чтобы каждый разработчик в команде мог работать с ним.
Принятие проектов баз данных может потребовать умственного сдвига ( старые привычки трудно сломать ) для некоторых разработчиков или, по крайней мере, изменения в процессе или рабочих процессах. Разработчикам, которые разработали приложения базы данных, в
которых производственная база данных представляет текущую версию базы данных, необходимо будет принять подход, основанный на исходном коде, когда исходный код становится средством, в которое вносятся изменения в базы данных . В проектах базы данных Visual Studio проект и исходный код являются «единой версией истины» для схемы базы данных и управляются с использованием рабочих процессов SCM, которые, вероятно, уже используются разработчиком или организацией для других частей их стека приложений. Для данных производственная база данных остается «Единой версией правды», как и должно быть.
Мы достигли фундаментального сдвига, необходимого для успешного внедрения подхода VS2010 к разработке баз данных ...
Рассматривайте свою базу данных как код
Больше не нужно менять живую базу данных. Каждое изменение базы данных будет следовать той же схеме, что и изменение приложения. Изменить источник, построить, развернуть. Это не временное изменение направления от Microsoft, это будущее для SQL Server . База данных как код здесь, чтобы остаться.
Разработчик базы данных определяет форму объекта для версии приложения, а не то, как преобразовать существующий объект в ядре базы данных в нужную форму. Вы можете спросить себя: как это развертывается в базе данных, которая уже содержит таблицу клиентов? Это где движок развертывания вступает в игру. Как упоминалось ранее, механизм развертывания возьмет скомпилированную версию вашей схемы и сравнит ее с целью развертывания базы данных. Разностный механизм создаст необходимые сценарии для обновления целевой схемы в соответствии с версией, которую вы развертываете из проекта.
Да, есть другие инструменты, которые следуют аналогичному шаблону, и для проектов, которые выходят за рамки ограничений, которые я наложил на свой ответ, они заслуживают равного рассмотрения. Но если вы работаете с Visual Studio и Team Foundation Server ALM, я не думаю, что они могут конкурировать.
Что не так с проектами баз данных VS2010?
Редактировать: Так в чем же тогда ваша точка зрения?
@AndrewBickerton упомянул в комментарии, что я не ответил на первоначальный вопрос, поэтому я постараюсь подвести итог: «Почему я должен использовать Visual Studio 2010 поверх SSMS для разработки своей базы данных?» Вот.
- SSMS не является инструментом разработки баз данных. Да, вы можете разрабатывать TSQL с SSMS, но он не предоставляет богатых возможностей IDE VS2010.
- VS2010 предоставляет платформу для обработки вашей базы данных как кода.
- VS2010 приносит статический анализ кода в код вашей базы данных.
- VS2010 предоставляет вам инструменты для полной автоматизации цикла сборки-развертывания-тестирования.
- SQL2012 и Visual Studio vNext расширяют возможности проектов баз данных. Познакомьтесь с VS2010 прямо сейчас, и вы получите преимущество по инструментам разработки баз данных следующего поколения.