Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Visual Studio 2010 Database Project  [new]
Raziel
Member

Откуда:
Сообщений: 496
Не подскажете, где можно подробно прочитать про тип проекта "Database Project"? Да, гуглил. Нагуглил только отрывочные записи в разных блогах. А вот комплексно где найти описание?
27 июл 11, 14:52    [11034491]     Ответить | Цитировать Сообщить модератору
 Re: Visual Studio 2010 Database Project  [new]
Database Project
Guest
Raziel
Не подскажете, где можно подробно прочитать про тип проекта "Database Project"? Да, гуглил. Нагуглил только отрывочные записи в разных блогах. А вот комплексно где найти описание?

а в чем именно проблема, там же все интуитивно понятно...
27 июл 11, 14:57    [11034529]     Ответить | Цитировать Сообщить модератору
 Re: Visual Studio 2010 Database Project  [new]
Database Project
Guest
ну если совсем ни как, вот тут посмотри http://msdn.microsoft.com/ru-ru/library/dd193271.aspx
27 июл 11, 15:03    [11034572]     Ответить | Цитировать Сообщить модератору
 Re: Visual Studio 2010 Database Project  [new]
Raziel
Member

Откуда:
Сообщений: 496
Ну вот пример. Есть некая бд, структура которой отражается в Database project. Есть некая таблица "Table". Нужно к ней добавить поле "Field", которое бы было not null. Т. е. добавить поле null, заменить у всех имеющихся строк значение этого поля, скажем, для некоторых строк на пустую строку - '', а для остальных - на 'nothing', затем изменить тип колонки на not null. Какие требуются действия? Как отредактировать проект и потом по нему внести изменения в БД?
12 авг 11, 09:38    [11107500]     Ответить | Цитировать Сообщить модератору
 Re: Visual Studio 2010 Database Project  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
Попробуйте почитать вот это.
12 авг 11, 14:11    [11109748]     Ответить | Цитировать Сообщить модератору
 Re: Visual Studio 2010 Database Project  [new]
Raziel
Member

Откуда:
Сообщений: 496
SamMan
Попробуйте почитать вот это.

Спасибо, статья первоклассная, я многое почерпнул. Но там тоже не описывается, куда пихать скрипт миграции. Когда одним указанием "DEFAULT" невозможно полноценно изменить структуру. Например, при переименовании первичного ключа. Или когда нужно в новой колонке задать значения в зависимости от имеющихся.
15 авг 11, 09:33    [11118034]     Ответить | Цитировать Сообщить модератору
 Re: Visual Studio 2010 Database Project  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
Raziel
Спасибо, статья первоклассная


Вам спасибо, я старался...

Raziel
куда пихать скрипт миграции. Когда одним указанием "DEFAULT" невозможно полноценно изменить структуру


Не совсем понятна суть ваших затруднений... Раздел статьи Модернизация Data-tier приложения со стороны разработчика разве не это самое описывает?
15 авг 11, 13:34    [11119745]     Ответить | Цитировать Сообщить модератору
 Re: Visual Studio 2010 Database Project  [new]
Raziel
Member

Откуда:
Сообщений: 496
SamMan
Raziel
куда пихать скрипт миграции. Когда одним указанием "DEFAULT" невозможно полноценно изменить структуру


Не совсем понятна суть ваших затруднений... Раздел статьи Модернизация Data-tier приложения со стороны разработчика разве не это самое описывает?

Она описывает простейший случай. А более сложное преобразование данных при переходе от одной версии БД к другой? Например, при добавлении not null - колонки заполнить её не с помощью (default(0)), а несколько сложнее?
15 авг 11, 15:28    [11120792]     Ответить | Цитировать Сообщить модератору
 Re: Visual Studio 2010 Database Project  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31983
Raziel
А более сложное преобразование данных при переходе от одной версии БД к другой? Например, при добавлении not null - колонки заполнить её не с помощью (default(0)), а несколько сложнее?
Более сложные вещи нужно делать руками, написав соответствующие скрипты.

Ну и судя по статье, никаких средств для управлении этим не появилось :-(
15 авг 11, 18:42    [11122537]     Ответить | Цитировать Сообщить модератору
 Re: Visual Studio 2010 Database Project  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
Raziel
Она описывает простейший случай. А более сложное преобразование данных при переходе от одной версии БД к другой?


Ну, во-1-х, имейте ввиду, что Data tier applications - технология зело молодая, с (пока еще) массой белых пятен (как это и отмечено в статье). Не думайте, что она предложит вам решение для любого практического случая. Отнюдь.

Raziel
Например, при добавлении not null - колонки заполнить её не с помощью (default(0)), а несколько сложнее?


А во-2-х, в данном случае пожалуй хоть какое-то решение - заюзать скрипт Script.PostDeployment.sql (находится в VS2010 по пути Имя проекта->Scripts->Post-Deployment). В этот скрипт вы можете добавить команды которые будут исполнены после апгрейда вашего решения на новую версию.
Навскидку, последовательность шагов такая:
  • в проекте добавляете NULL колонку (что бы нормально прошел "перелив" данных между старой версией и новой; вариация - объявить колонку NOT NULL, но с DEFAULT(чего-то там))
  • в указанном скрипте апдейтите все строки таблицы для этой колонки
  • там же пишите ALTER TABLE и меняете тип колонки NULL->NOT NULL

    P.S. Предложение не проверялось, так что поставляется "as is" Хотя не вижу причин по которым оно бы не работало для простейших случаев.
  • 15 авг 11, 19:20    [11122773]     Ответить | Цитировать Сообщить модератору
     Re: Visual Studio 2010 Database Project  [new]
    alexeyvg
    Member

    Откуда: Moscow
    Сообщений: 31983
    SamMan
    А во-2-х, в данном случае пожалуй хоть какое-то решение - заюзать скрипт Script.PostDeployment.sql (находится в VS2010 по пути Имя проекта->Scripts->Post-Deployment). В этот скрипт вы можете добавить команды которые будут исполнены после апгрейда вашего решения на новую версию.
    Этим способом не получится.

    Ведь, насколько я понимаю, скрипт Script.PostDeployment.sql один на весь проект, а не на каждый деплой (тем более, непонятно, с какой версии на какую).
    15 авг 11, 21:01    [11123043]     Ответить | Цитировать Сообщить модератору
     Re: Visual Studio 2010 Database Project  [new]
    SamMan
    Member

    Откуда: Moscow
    Сообщений: 759
    alexeyvg
    скрипт Script.PostDeployment.sql один на весь проек


    На каждую версию проекта, в том смысле что в каждой новой версии он может быть свой. Но - один.

    alexeyvg
    а не на каждый деплой


    Если под деплоем вы имеете ввиду именно версию проекта - таки да, как каждый деплой свой Script.PostDeployment.sql.

    alexeyvg
    тем более, непонятно, с какой версии на какую


    эээ... что, простите, непонятно? :)
    16 авг 11, 13:34    [11126131]     Ответить | Цитировать Сообщить модератору
     Re: Visual Studio 2010 Database Project  [new]
    alexeyvg
    Member

    Откуда: Moscow
    Сообщений: 31983
    SamMan
    На каждую версию проекта, в том смысле что в каждой новой версии он может быть свой. Но - один.
    А, понял. Думал, что на весь проект один такой файл.

    SamMan
    alexeyvg
    тем более, непонятно, с какой версии на какую

    эээ... что, простите, непонятно? :)
    Непонятно, версии обновляются последовательно или нет.

    Если нет, то в случае деплоя с версии 10 сразу на 12, минуя 11-ю, выполнится-ли Script.PostDeployment.sql, относящийся к 11-й?
    16 авг 11, 13:51    [11126265]     Ответить | Цитировать Сообщить модератору
     Re: Visual Studio 2010 Database Project  [new]
    SamMan
    Member

    Откуда: Moscow
    Сообщений: 759
    alexeyvg
    Если нет, то в случае деплоя с версии 10 сразу на 12, минуя 11-ю, выполнится-ли Script.PostDeployment.sql, относящийся к 11-й?


    Не выполнится потому что не нужна. Почему не нужна - доказательство:

    1. Если бы "генеральная линия" апдейтов Data tier applications была бы:
    Версия 10 -> создали таблицу T(col1,col2,col3) и вставили в нее 5 строк
    Версия 11 -> из таблицы T удалили col3 и строку N5 и вставили строку 6
    Версия 12 -> из таблицы T удалили колонку col2 и строку N6

    то в этом случае пропуск версии 11 был бы смерти подобен.

    2. Однако линия ведется чище чем алмазом по стеклу:
    Версия 10 -> создали таблицу T(col1,col2,col3) и вставили в нее 5 строк
    Версия 11 -> создали T(col1,col2) и вставили туда строки 1-4,6
    Версия 12 -> создали T(col1) и вставили туда строки 1-4

    и в этом случае версии получаются полностью отвязанные, а не в "цепочке". Что, ИМХО, гениально.
    16 авг 11, 14:58    [11126753]     Ответить | Цитировать Сообщить модератору
     Re: Visual Studio 2010 Database Project  [new]
    alexeyvg
    Member

    Откуда: Moscow
    Сообщений: 31983
    SamMan
    Не выполнится потому что не нужна. Почему не нужна - доказательство:
    Эээ, не понял доказательства :-(

    Вот мы делаем версии:

    Версия 10 -> создали таблицу T(col1,col2,col3)

    Версия 11 -> добавили поле col4 в T, теперь у нас T(col1,col2,col3,col4)
    Для версии 11 сделали Script.PostDeployment.sql, заполняющий col4

    Версия 12 -> понаделали ещё всяких изменений с БД. Скрипт Script.PostDeployment.sql для версии 12 конечно уже новый (свой файл для каждой версии проекта БД, как вы писали), заполнения col4 там нету.

    Рассылаем деплой-файл версии 12 тыще клиентов.

    У них у всех, понятно, разные версии (9, 10, 11), которые они хотят проапгрэйдить до 12-й

    Деплой-система сравнивает модели и апгрейдит схему до 12-й версии от любой предыдущей, как и должно работать.

    Но Script.PostDeployment.sql для перехода 10-11 в ней уже получается нету!
    То есть для перехода версий 9-12 проблемы нет - таблицы-то не было, данные менять не надо.
    А для перехода 10-12 проблема возникает.

    И собственно, дело даже не в тыще клиентов.

    Нормальный процесс разработки предполагает внесение изменений разработчиками и ежедневные билды с повышением версии (возможно с деплоем на дев-сервер, или без такового)
    Далее время от времени делается деплой на продакшен (в идеале на тест, а потом на проадкшен)
    Но это конечно не каждый раз после деплоя на дев, а время от времени (например, раз в неделю, месяц или несколько месяцев).
    И получаются такие же проблемы - пачка скриптов Script.PostDeployment.sql будет пропускаться ...
    16 авг 11, 15:53    [11127414]     Ответить | Цитировать Сообщить модератору
     Re: Visual Studio 2010 Database Project  [new]
    alexeyvg
    Member

    Откуда: Moscow
    Сообщений: 31983
    SamMan
    2. Однако линия ведется чище чем алмазом по стеклу:
    Версия 10 -> создали таблицу T(col1,col2,col3) и вставили в нее 5 строк
    Версия 11 -> создали T(col1,col2) и вставили туда строки 1-4,6
    Версия 12 -> создали T(col1) и вставили туда строки 1-4
    А, понял, про что вы.

    Но речь то идёт не о системных справочниках, для которых это применимо.

    Речь, например, о таблице заказов.

    Для примера была таблица Заказы с полем ФИО клиента.

    А потом решили немножко понормализовывать и сделать вместо поля "ФИО клиента" поле "id клиента" с сылкой на соответствующую таблицу.

    Соответственно, нужно в процессе обновления версии создать таблицу Клиенты, заполнить её клиентами из таблицы Заказы, и правильно проставить ссылки в поле "id клиента", удалив потом поле "ФИО клиента"

    Вполне типичная простенькая задача.
    16 авг 11, 18:09    [11128675]     Ответить | Цитировать Сообщить модератору
     Re: Visual Studio 2010 Database Project  [new]
    SamMan
    Member

    Откуда: Moscow
    Сообщений: 759
    alexeyvg
    Для примера была таблица Заказы с полем ФИО клиента.

    А потом решили немножко понормализовывать и сделать вместо поля "ФИО клиента" поле "id клиента" с сылкой на соответствующую таблицу


    Вполне возможно что такой сценарий и не реализуется data-tier application технологией, и для нее (на текущем этапе) такая задача отнюдь не "простенькая". Справедливости ради заметим что корень поставленной задачи в изначально порочном дизайне БД (не соблюдение нормализации). Хотя "теория" vs. "реальность" - это все понятно.
    Кстати, поскольку после апгрейда старая БД остается в полном неприкосновении (но под иным именем) включае все ее колонки/данные можно, потенциально, заюзать для решения проблемы кросс-базовые запросы. Но тут масса проблем, первая из которых - как заранее узнать имя переименнованной БД, если оно генерируется движком по какому-то неясному алгоритму? В общем - не просто все. :(
    И да - сыровата технология, сыровата. Версия 1.0, если не сказать 0.9.beta.
    17 авг 11, 11:26    [11131359]     Ответить | Цитировать Сообщить модератору
     Re: Visual Studio 2010 Database Project  [new]
    bacalavr
    Member

    Откуда:
    Сообщений: 311
    SamMan,

    А можно ли таким образом работать с частью базы?
    допустим есть большая бд большой системы. я хочу добавить свой модуль, который будет связан с основной системой. но я хочу работать только со своим набором процедур,таблиц (скажем, 100 штук) а не со всеми процедурами и таблицами системы(несколько тысяч).
    17 авг 11, 12:27    [11131995]     Ответить | Цитировать Сообщить модератору
     Re: Visual Studio 2010 Database Project  [new]
    SamMan
    Member

    Откуда: Moscow
    Сообщений: 759
    bacalavr
    А можно ли таким образом работать с частью базы?


    Нет, 1 проект типа Data-tier==1БД. Любой деплоймент/апгрейд==создание новой базы. Даже имя проекта становится именем базы, что как бэ намекает.
    17 авг 11, 12:40    [11132137]     Ответить | Цитировать Сообщить модератору
     Re: Visual Studio 2010 Database Project  [new]
    alexeyvg
    Member

    Откуда: Moscow
    Сообщений: 31983
    SamMan
    Справедливости ради заметим что корень поставленной задачи в изначально порочном дизайне БД (не соблюдение нормализации). Хотя "теория" vs. "реальность" - это все понятно.
    Это понятно, согласен.

    Только ведь нет ни одной базы, в которой не было бы нужно делать такие изменения, независимо от гениальности проектировщиков :-)

    SamMan
    И да - сыровата технология, сыровата. Версия 1.0, если не сказать 0.9.beta.
    Это да, нужно ждать.

    А пока использовать проекты типа DBP, которые в принципе предоставляют все нужные возможности. Только требуют больше квалификации и написания скриптов, более трудоёмки в использовании.

    При этом подавляющая часть скриптов прекрасно генерится самой студией, нужно их просто класть в файлы, так что трудоёмкость, собственно, в создании нужного окружения.
    17 авг 11, 14:51    [11133476]     Ответить | Цитировать Сообщить модератору
    Все форумы / Microsoft SQL Server Ответить