¿Cuál es la forma estándar o mejor para tratar con la ramificación de la database con las twigs de Mercurial o Git?

Esto ha sido un gran signo de interrogación en mi mente.

Me estoy mudando a Mercurial o Git muy pronto para mi software web, y algunas veces mis sucursales requieren cambios significativos en la database que otras sucursales no deberían ver. Esto, no siempre puedo compartir la misma database para mis sucursales.

¿Hay alguna forma estándar de lidiar con los cambios en la database para ramificación y clonación? Que hacen todos ustedes? Estoy usando MySQL.

Usar una herramienta Changset de database puede ser realmente útil. He usado liquibase ( http://www.liquibase.org ), en el trabajo para administrar el control de versiones para el db. Recomendaría encarecidamente esa herramienta a cualquiera. Liquibase admite sets de cambios, con escenarios de retrotracción configurables. Sin embargo, es una herramienta para administrar el esquema, no los datos reales. No trataría de usarlo para mantener los datos de la tabla actualizados.

Sin embargo, todavía siento que su mejor opción es usar liquibase, y tener diferentes esquemas, para diferentes twigs de origen.

No tengo una respuesta para usted, pero encontré un artículo reciente que podría ser relevante: por qué es mala estrategia de control de versiones de su database y qué hacer al respecto, Parte I

Para manejar la clonación, su database debe diseñarse para ser multiusuario.

Para los cambios en el esquema, confirme los cambios en el esquema para esa twig como parte del repository.

Entonces tiene que decidirse, para cada esquema, ¿ejecuta múltiples espacios de tabla en una database, bases de datos múltiples, etc.? Luego, ingrese un puntero al correcto como parte de la configuration de installation en esa twig.

El esquema de la database es en sí mismo (registrado en) una database cuya estructura está, más o less, definida por el INFORMATION_SCHEMA del estándar SQL.

Ahora, los DBMS están diseñados deliberadamente para permitir solo un único valor de database en un punto único en el time. Y dado que el catálogo es en sí mismo "solo un valor de database para la database INFORMATION_SCHEMA", los sistemas SQL admiten, deliberadamente, solo una única estructura de database en un punto único en el time.