En ingeniería de software , la migración de esquemas (también migración de bases de datos , gestión de cambios de bases de datos ) se refiere a la gestión de cambios incrementales y reversibles y al control de versiones de esquemas de bases de datos relacionales . Se realiza una migración de esquema en una base de datos siempre que sea necesario actualizar o revertir el esquema de esa base de datos a una versión más nueva o anterior.
Las migraciones se realizan mediante programación mediante una herramienta de migración de esquemas . Cuando se invoca con una versión de esquema deseada especificada, la herramienta automatiza la aplicación sucesiva o la reversión de una secuencia apropiada de cambios de esquema hasta que se lleva al estado deseado.
La mayoría de las herramientas de migración de esquemas tienen como objetivo minimizar el impacto de los cambios de esquema en cualquier dato existente en la base de datos. A pesar de esto, la conservación de los datos en general no está garantizada porque los cambios de esquema, como la eliminación de una columna de la base de datos, pueden destruir datos (es decir, se eliminan todos los valores almacenados en esa columna para todas las filas de esa tabla). En cambio, las herramientas ayudan a preservar el significado de los datos o a reorganizar los datos existentes para cumplir con los nuevos requisitos. Dado que el significado de los datos a menudo no se puede codificar, la configuración de las herramientas suele requerir una intervención manual.
Riesgos y beneficios
La migración de esquemas permite corregir errores y adaptar los datos a medida que cambian los requisitos. Son una parte esencial de la evolución del software, especialmente en entornos ágiles (ver más abajo).
Aplicar una migración de esquema a una base de datos de producción siempre es un riesgo. Las bases de datos de desarrollo y prueba tienden a ser más pequeñas y limpias. Los datos que contienen se comprenden mejor o, si todo lo demás falla, la cantidad de datos es lo suficientemente pequeña como para que la procese un humano. Las bases de datos de producción suelen ser enormes, antiguas y llenas de sorpresas. Las sorpresas pueden provenir de muchas fuentes:
- Datos corruptos que fueron escritos por versiones antiguas del software y que no se limpiaron correctamente.
- Dependencias implícitas en los datos que ya nadie conoce
- Personas que cambian directamente la base de datos sin utilizar las herramientas designadas
- Errores en las herramientas de migración de esquemas
- Errores en las suposiciones sobre cómo se deben migrar los datos
Por estas razones, el proceso de migración necesita un alto nivel de disciplina, pruebas exhaustivas y una estrategia de respaldo sólida.
Migración de esquemas en el desarrollo ágil de software
Al desarrollar aplicaciones de software respaldadas por una base de datos, los desarrolladores suelen desarrollar el código fuente de la aplicación junto con un esquema de base de datos en evolución. El código generalmente tiene expectativas rígidas de qué columnas, tablas y restricciones están presentes en el esquema de la base de datos siempre que necesite interactuar con uno, por lo que solo la versión del esquema de la base de datos con la que se desarrolló el código se considera totalmente compatible con esa versión del código fuente. .
En las pruebas de software , mientras que los desarrolladores pueden burlarse de la presencia de un sistema de base de datos compatible para las pruebas unitarias , cualquier nivel de prueba superior a este (por ejemplo, pruebas de integración o pruebas del sistema ) es común que los desarrolladores prueben su aplicación contra una base de datos de prueba local o remota. esquemáticamente compatible con la versión del código fuente bajo prueba. En aplicaciones avanzadas, la migración en sí misma puede estar sujeta a pruebas de migración .
Con la tecnología de migración de esquemas, los modelos de datos ya no necesitan estar completamente diseñados por adelantado y son más capaces de adaptarse a los requisitos cambiantes del proyecto a lo largo del ciclo de vida del desarrollo de software .
Relación con los sistemas de control de revisiones
Los equipos de desarrolladores de software suelen utilizar sistemas de control de versiones para gestionar y colaborar en los cambios realizados en las versiones del código fuente. Diferentes desarrolladores pueden desarrollar en ramas divergentes, relativamente antiguas o más nuevas del mismo código fuente para realizar cambios y adiciones durante el desarrollo.
Suponiendo que el software en desarrollo interactúa con una base de datos, cada versión del código fuente puede asociarse con al menos un esquema de base de datos con el que sea compatible.
Según las buenas prácticas de prueba de software , las migraciones de esquemas se pueden realizar en bases de datos de prueba para garantizar que su esquema sea compatible con el código fuente. Para agilizar este proceso, generalmente se invoca una herramienta de migración de esquemas como parte de una compilación de software automatizada como requisito previo de la fase de prueba automatizada .
Se puede decir que las herramientas de migración de esquemas resuelven problemas de versiones para esquemas de bases de datos del mismo modo que los sistemas de control de versiones resuelven problemas de versiones para el código fuente. En la práctica, muchas herramientas de migración de esquemas se basan en una representación textual de los cambios de esquema (como archivos que contienen declaraciones SQL), de modo que el historial de versiones de los cambios de esquema se puede almacenar de manera efectiva junto con el código fuente del programa dentro de VCS. Este enfoque asegura que la información necesaria para recuperar un esquema de base de datos compatible para una rama de código en particular sea recuperable del árbol de origen mismo. Otro beneficio de este enfoque es el manejo de cambios de esquema conflictivos concurrentes; los desarrolladores pueden simplemente usar sus herramientas habituales de resolución de conflictos basadas en texto para reconciliar diferencias.
Relación con la evolución del esquema
Las herramientas de migración de esquemas podrían verse como una facilidad para rastrear el historial de un esquema en evolución.
Ventajas
Los desarrolladores ya no necesitan eliminar toda la base de datos de prueba para crear una nueva base de datos de prueba desde cero (por ejemplo, utilizando scripts de creación de esquemas de las herramientas de generación de DDL). Además, si la generación de datos de prueba cuesta mucho tiempo, los desarrolladores pueden evitar la regeneración de datos de prueba para cambios pequeños y no destructivos en el esquema.