En el trabajo, utilizamos una versión modificada de DBIx::Migration (tiene algunas limitaciones, como no más de 10 migraciones). Luego, tiene un esquema central que ha descartado de su base de datos y, cuando el número de versión es muy bajo, actualiza su base de datos utilizando las migraciones del directorio de esquema de migración.
También recomiendo encarecidamente el libro Database Refactoring.Entre otras cosas, le brindará excelentes técnicas para administrar las migraciones de forma segura de forma que si necesita retroceder, no pierde datos (como cuando suelta una columna que cree que no necesita) .
Para ayudar con los programas de desactivación automática que sugiere, he escrito Devel::Deprecate para que no tenga que recordar cuándo hacer las depreciaciones. Su código se quejará en voz alta por usted (y solo en las pruebas, no en la producción).
Importante: Encontrará periódicamente que va a aplicar tantos niveles de migración de base de datos con esta técnica que usted va a veces es necesario "subir" la migración de base mínima, ya que toma mucho tiempo para reconstruir la base de datos. Simplemente tome un nuevo volcado de la base de datos en el nivel de migración deseado y elimine todas las migraciones inferiores o iguales a ese nivel.
actualización: Avance rápido de unos años y hoy me recomiendan sqitch. Está diseñado desde cero para manejar el caso de poner una base de datos bajo control de versiones sin vincularlo a un lenguaje de programación particular o VCS.
A partir del 27/04/12, todavía parece ser compatible con SQLite. –