El diseño evolutivo de bases de datos implica mejoras incrementales en el esquema de la base de datos para que pueda actualizarse continuamente con los cambios, reflejando los requisitos del cliente. Personas de todo el mundo trabajan en el mismo software al mismo tiempo, por lo tanto, existe la necesidad de técnicas que permitan una evolución fluida de la base de datos a medida que se desarrolla el diseño. Estos métodos utilizan la refactorización automatizada y la integración continua para respaldar las metodologías ágiles para el desarrollo de software. Estas técnicas de desarrollo se aplican en sistemas que se encuentran en la etapa de preproducción , así como en sistemas que ya se han lanzado. Estas técnicas no solo cubren los cambios relevantes en el esquema de la base de datos según las necesidades cambiantes del cliente, sino también la migración de datos modificados a la base de datos y también la personalización del código de acceso a la base de datos en consecuencia sin cambiar la semántica de los datos . [1]
Después de utilizar el modelo en cascada durante mucho tiempo, la industria del software ha sido testigo de un aumento en la adopción de métodos ágiles para el desarrollo de software. Las metodologías ágiles no asumen que los requisitos sean permanentes en ninguna etapa del ciclo de vida del software . Estos métodos están diseñados para admitir cambios esporádicos en contraste con la técnica de diseño en cascada. Una parte importante de este enfoque es el desarrollo iterativo , donde todo el ciclo de vida del software se ejecuta varias veces durante la vida de un proyecto. Cada iteración es testigo del ciclo de vida completo del desarrollo del software a pesar de que las iteraciones son de corta duración que puede variar entre semanas y algunos meses. [1]
Antes de la adopción de estas metodologías, todo el sistema se diseñaba antes de empezar a desarrollar el código. El mismo principio se aplicó también al esquema de la base de datos, donde se consideró que se derivaba de los requisitos del software que, a su vez, se desarrollaban mediante la colaboración entre el cliente, los usuarios finales, los analistas de negocios, etc. y no se esperaba que estos requisitos cambiaran con el progreso en el desarrollo del software. Este enfoque resultó ser engorroso porque, a medida que transcurría el tiempo, las redundancias en el esquema de la base de datos existente en forma de filas o columnas sin usar eran evidentes. Esta redundancia, junto con los problemas de calidad de los datos, se convirtió en un asunto costoso. Se concluyó que la práctica de no intercalar el diseño con la construcción y las pruebas era altamente ineficiente. [1]
Como se mencionó en la sección anterior, los métodos evolutivos son de naturaleza iterativa y se han vuelto inmensamente populares en las últimas dos décadas. El diseño evolutivo de bases de datos tiene como objetivo construir el esquema de la base de datos a lo largo del proyecto en lugar de construir todo el esquema de la base de datos al comienzo del proyecto. Este método de diseño de bases de datos puede capturar y abordar de manera eficaz los requisitos cambiantes de los proyectos.
Existen cinco técnicas de diseño de bases de datos evolutivas que pueden ayudar a los desarrolladores a crear sus bases de datos de forma iterativa. A continuación, se ofrece una breve descripción general de las cinco técnicas.
La refactorización es el proceso de realizar cambios en el programa sin afectar la funcionalidad del mismo. La refactorización de bases de datos es la técnica de implementar pequeños cambios en el esquema de la base de datos sin afectar la funcionalidad y la información almacenada en la base de datos. [2] El objetivo principal de la refactorización de bases de datos es mejorar el diseño de la base de datos para que esté más sincronizada con los requisitos cambiantes. El usuario puede modificar tablas , vistas , procedimientos almacenados y activadores . La dependencia entre la base de datos y las aplicaciones externas hacen que la refactorización de bases de datos sea un desafío.
El modelado de datos es la técnica de identificar entidades , asociar atributos a las entidades y decidir la estructura de datos para representar los atributos. [3] En el escenario de base de datos tradicional, se crea un modelo de datos lógico al principio para representar las entidades y sus atributos asociados. En el modelado de datos evolutivo, la técnica de modelado de datos se realiza de manera iterativa, es decir, se desarrollan múltiples modelos de datos, cada modelo representa un aspecto diferente de la base de datos. Este tipo de técnica de modelado de datos se practica en un entorno ágil y es uno de los principios principales del desarrollo ágil. [4]
Siempre que se añade una nueva funcionalidad a un sistema, es esencial verificar que la actualización no corrompa o inutilice el sistema. En una base de datos, la lógica empresarial se implementa en procedimientos almacenados , reglas de validación de datos e integridad referencial y deben probarse exhaustivamente cuando se implementa cualquier cambio en el sistema. La prueba de regresión es el proceso de ejecutar todos los casos de prueba cada vez que se añade una nueva característica al sistema. El desarrollo de prueba primero (TFD) es una forma de prueba de regresión que se sigue en el diseño de bases de datos evolutivas. Los pasos involucrados en el enfoque TFD son, [3]
La gestión de la configuración es un registro detallado de las versiones y actualizaciones que se han aplicado a cualquier sistema. La gestión de la configuración es útil para revertir actualizaciones y cambios que han afectado al sistema de manera negativa. Para garantizar que se puedan revertir las actualizaciones realizadas en la refactorización de la base de datos, es importante mantener los artefactos de la base de datos como los scripts de lenguaje de definición de datos , los archivos de modelos de datos, los datos de referencia , los procedimientos almacenados, etc. en un sistema de gestión de la configuración. [5]
Un sandbox es un entorno completamente funcional en el que se puede construir, probar y ejecutar el sistema. Para realizar cambios en el esquema de la base de datos de manera evolutiva, lo ideal es que cada desarrollador tenga su propio sandbox físico, copia del código fuente y una copia de la base de datos . En un entorno sandbox, el desarrollador puede realizar cambios en el esquema de la base de datos y ejecutar pruebas sin afectar el trabajo de otros desarrolladores y otros entornos. Una vez que el cambio se ha implementado con éxito, se promueve al entorno de preproducción donde se realizan pruebas de aceptación y, una vez que las pruebas de aceptación son exitosas, se implementa en producción .
Las técnicas de diseño de bases de datos tradicionales no admiten cambios como las técnicas de diseño de bases de datos evolutivas. "Desafortunadamente, la comunidad de datos tradicional asumió que evolucionar el esquema de la base de datos es algo difícil de hacer y, como resultado, nunca pensó en cómo hacerlo". [1] En cierto modo, el diseño evolutivo es mejor para los desarrolladores de aplicaciones y el diseño tradicional es mejor para los profesionales de datos. [6]
A continuación se muestra una lista de herramientas que proporcionan la funcionalidad de diseñar y desarrollar una base de datos de manera evolutiva.