Why not have the schema definitions in the program? When a version 0.9 of the application starts (for the first time), it goes along and checks the database according to some internal or external (txt file) information to determine if the current version of the database is compatible with the application.
If not, the application will trigger a mechanism that updates the database to meet the requirements of the 0.9 version of the application. Subsequent applications logging in to the database perform a simple version number check in the database and will start faster than the first application that connected.
This concept allows for a wide distribution of different versions of the application, which can be updated from version 0.9 directly to 1.2 or in smaller increments, because the current definition of the required database (schema) is distributed together with the verison of the applicaiton. Either in the applicaiton or in a supplied text filetion.
Works on Citrix (central database), Stand-alone (single seat), Stand-alone (centralised database), Docker images, etc.
The application: ... compares the database version/schema with the application version ... triggers any required updates to the schema of its database ... allows for verious versions of the application to be running in different setups
It doesn't work if you have different versions of the application running in the same location connecting to a centralised database. Here you will have to have some application packaging and distribution in place to ensure that all clients connect with the same application version of the central database OR you disallow older applications to connect to the database if the version does not match the required database version.
@jcolebrand Morning is this dbms-specific? I.e. SQL Server? If so, a common way of automating schema updates is via Microsoft's sqlpackage.exe with a model of the desired database state. At app setup, you spawn sqlpackage to bring the database into the desired state.
We use it for applying changes to QA/UAT/Prod regularly.