Cree scripts bajo control de versiones e integración continua para verificarlos
Un enfoque que funcionó para mí fue que cada desarrollador trabajara con su propio esquema, con el que pueden hacer lo que quieran. Su esquema era destructible y estaba lleno de datos de prueba tomados de un conjunto de scripts controlados por versiones a los que contribuían todos los desarrolladores.
La compilación de integración continua nocturna tomó la última versión de todos los scripts e intentó construir una base de datos de prueba coherente a partir de ellos. Luego, la aplicación realizó una serie de pruebas integrales y funcionales para verificar que el esquema actual estuviera en línea con el candidato de versión actual.
Antes de comenzar este camino, había un diseño de base de datos bastante sólido y un DBA siempre estaba atento a las cosas para evitar que los desarrolladores se volvieran locos con la desnormalización y otros horrores.
El control de versiones ayudó enormemente aquí porque los cambios en los scripts fueron inmediatamente obvios. También hicimos uso de una VERSION
tabla de base de datos para identificar el estado general de la base de datos. Esta era una secuencia entera simple y no estaba vinculada a ninguna aplicación en particular.
En general, funcionó bien y significó que los desarrolladores dejaron de temer cambiar los niveles de persistencia porque siempre podían revertir sus propios esquemas sin afectar a los demás.
El enfoque que uso es proporcionar una tabla para los parámetros. Esta tabla tendrá un par de nombre / valor para la versión en la que se encuentra la base de datos. Esto me da dos beneficios: tengo una manera de verificar que una base de datos solo se ha aplicado a través de la aplicación, y puedo usar ese valor para mis scripts SQL.
El script SQL creará nuevas tablas, alterará las columnas y cualquier trabajo que se necesite en la base de datos para promover el script desde la versión anterior. Idealmente, también tendría un script de reversión, pero la mayoría de las veces no.
Por cierto, todo este enfoque se ha automatizado como parte de Ruby on Rails, completo con los scripts de reversión. Me gusta la idea de eso, pero no todos los marcos lo hacen. Cuando no estoy usando Ruby on Rails, uso el enfoque descrito anteriormente.
fuente