Después de unas pocas iteraciones, el enfoque que tomamos fue más o menos así:
Un archivo por mesa y por procedimiento almacenado. También separe los archivos para otras cosas como configurar usuarios de la base de datos, rellenar tablas de búsqueda con sus datos.
El archivo de una tabla comienza con el comando CREAR y se agrega una sucesión de comandos ALTER a medida que el esquema evoluciona. Cada uno de estos comandos está entre corchetes en las pruebas de si la tabla o columna ya existe. Esto significa que cada script se puede ejecutar en una base de datos actualizada y no cambiará nada. También significa que para cualquier base de datos anterior, el script lo actualiza al último esquema. Y para una base de datos vacía, el script CREATE crea la tabla y todos los scripts ALTER son omitidos.
También tenemos un programa (escrito en Python) que escanea el directorio lleno de scripts y los ensambla en un script grande. Analiza el SQL lo suficiente como para deducir las dependencias entre las tablas (en función de las referencias de clave externa) y ordenarlas de forma adecuada. El resultado es una secuencia de comandos SQL monstruosa que hace que la base de datos cumpla con las especificaciones de una vez. El programa de ensamblaje de scripts también calcula el hash MD5 de los archivos de entrada y lo utiliza para actualizar un número de versión que está escrito en una tabla especial en el último script de la lista.
Al no tener accidentes, el resultado es que el script de la base de datos para una versión de entrega del código fuente crea el esquema con el que este código fue diseñado para interoperar. También significa que hay un solo script SQL (algo grande) para entregar al cliente para construir nuevas bases de datos o actualizar las existentes. (Esto fue importante en este caso porque habría muchas instancias de la base de datos, una para cada uno de sus clientes).)
Estoy seguro de que se mantienen solo desde el punto de vista de la documentación de SOX, de modo que tiene algo que mostrar a los auditores (si preguntan) QUÉ cambio se realizó. –
Seguramente sería igualmente importante poder mostrarse a USTED qué cambio se realizó. –