He intentado el proyecto de base de datos de RedGate y Visual Studio y prefiero almacenar la definición de la base de datos en el proyecto de base de datos. Tan pronto como la base de datos se convierta en parte de la solución, puede usar su proveedor de control de fuente preferido. La mayoría tiene una excelente integración de Visual Studio.
Con las herramientas SSDT, tiene la 'última versión' de la definición de la base de datos, lo que le permite realizar comparaciones de esquemas y generar scripts de actualización de esquemas fácilmente.
Dicho esto, el esquema generalmente es solo una parte de la ecuación. En la vida real resulta que las bases de datos ya tienen muchos datos. Y mis usuarios tienden a sentirse bastante decepcionados cuando lo pierden.
Tan pronto como lancé la v1.0, surge la necesidad de mantener los scripts de actualización. A veces, estos solo contienen cambios en el esquema, pero muchas veces necesito crear valores predeterminados basados en el contenido de alguna otra tabla, necesito liberar una restricción particular hasta que sembraron los datos, etc. Por lo general, simplemente actualizar el esquema no es suficiente. Mi preferencia es tener estos scripts de actualización en una carpeta separada en el proyecto de base de datos también. Por lo general, se vería como 'actualizar de v1.0 a v1.1'.
Mis bases de datos siempre tienen una tabla de referencia que me indica el número de versión actual, por lo que puedo bloquear actualizaciones incompatibles. La primera declaración en mis scripts de actualización verifica la versión actual y rescata si es diferente de lo esperado.
Otro beneficio de los proyectos de bases de datos es poder implementar diferentes conjuntos de datos basados en el mismo esquema. Tengo un conjunto de datos diferente para el desarrollo, el equipo de control de calidad, la prueba de aceptación del usuario y las pruebas de integración automatizadas. Dado que un proyecto de base de datos puede tener solo 1 secuencia de comandos posterior a la implementación, el truco aquí es hacer un nuevo proyecto de base de datos que haga referencia al proyecto 'maestro' y hacer que el conjunto de datos personalizado sea parte del proceso posterior a la implementación de ese proyecto.
Estos fueron mis 2 centavos, sea cual sea el proceso que surja, sobre todo, debe ajustarse a usted y a su equipo y, con suerte, apoyarlo con la mayoría de las tareas comunes.