Matt, I like to put two magic numbers in a special database table: The change number, The compatibility number.
The first increments whenever the schema changes. The second increments only when a "breaking" change is made. The app startup code can use these numbers to determine if it can run or not, or perhaps to run in a crippled way (but I haven't needed that yet). Your needs are probably far more complicated that I describe, but my tiny humble system at least forces you to think about keeping the code and DB working together. Greg