Я спробував як проект бази даних RedGate, так і Visual Studio, і я вважаю за краще зберігати визначення бази даних у проекті бази даних. Як тільки база даних стане частиною рішення, ви можете скористатись уподобаним постачальником джерела управління. Більшість мають чудову інтеграцію Visual Studio.
За допомогою інструментів SSDT у вас є "остання версія" визначення бази даних, що дозволяє вам легко робити порівняння схем і генерувати сценарії оновлення схеми.
Однак, схема зазвичай є лише частиною рівняння. У реальному житті виявляється, що в базах даних вже існує велика кількість даних. І мої користувачі, як правило, дуже розчаровані, коли втрачають його.
Отож, як тільки я розгорнув v1.0, мені потрібно переходити, щоб підтримувати сценарії оновлення. Іноді вони просто містять зміни схеми, але мені багато разів потрібно створювати типові параметри на основі вмісту якоїсь іншої таблиці, потрібно звільняти певне обмеження, поки я не засію дані тощо. Зазвичай просто оновлення схеми не дуже скорочує її. Я вважаю за краще, щоб цей сценарій оновлення містився в окремій папці в проекті баз даних. Зазвичай вони виглядають як "оновлення з v1.0 до v1.1".
У моїх базах даних завжди є довідкова таблиця, яка вказує мені номер поточної версії, тому я можу заблокувати несумісні оновлення. Перше твердження в моїх сценаріях оновлення перевіряє поточну версію та видаляє, чи не відрізняється від очікуваного.
Ще одна перевага проектів баз даних - можливість розгортати різні набори даних на основі однієї схеми. У мене є різні набори даних для розробки, команди з контролю якості, тесту на прийняття користувачів та для тестів автоматизованої інтеграції. Оскільки проект бази даних може мати лише 1 сценарій після розгортання, фокус полягає в тому, щоб створити новий проект бази даних, який посилається на "головний" проект, і зробити власну базу даних частиною процесу розгортання після цього проекту.
Це були мої 2 копійки, який би процес ви не підійшли, перш за все, він повинен відповідати вам та вашій команді та сподіваємось підтримати вас у більшості загальних завдань.