Sono d'accordo con @FrustratedWithFormsDesigner nel senso che è del tutto possibile, E che lo script per l'aggiornamento della struttura del database non dovrebbe essere accompagnato dal codice dell'applicazione. Per questo motivo l'applicazione richiede altre autorizzazioni che consentono di creare tabelle, modificare tabelle, ecc. Che probabilmente non sono necessarie durante l'utilizzo "normale" dell'applicazione. Quindi, in termini di sicurezza, non è una buona cosa, dal momento che l'applicazione dovrebbe avere solo le autorizzazioni necessarie per funzionare correttamente.
Comunque, torniamo al punto principale. È abbastanza possibile farlo correttamente creando una tabella speciale nel tuo database, diciamo X_VERSION, in cui avrai semplicemente la versione corrente dello schema del database (potrebbe anche essere un timestamp).
Ogni volta che si modifica lo schema del database, si inserisce tale modifica in uno script SQL denominato [Timestamp-XXX-WhateverItIsYouAreDoing.sql], dove:
- Timestamp è il timestamp, ad esempio 20110111-165500
- XXX è un numero, che sarà utile in seguito per conoscere l'ordine di esecuzione degli script
- Qualunque cosa, ecc. è un testo che ti aiuterà a ricordare ciò che fai in quello script
Se il tuo programma di aggiornamento del database è nella tua applicazione o al di fuori non importa per i seguenti passaggi; ogni volta che fornisci una nuova versione della tua applicazione, il tuo programma di aggiornamento dovrebbe fare questo:
Quando tutti gli script sono terminati, sai che la tua applicazione può essere avviata in sicurezza.
Bonus :
Se vuoi avere un modo sicuro per tornare a una versione precedente, ogni volta che crei uno script che altera il tuo database, crea sempre da qualche parte uno script che ti permetta di tornare alla versione precedente. A volte può essere un po 'difficile (ad esempio rimuovere una colonna, non tutti i DBMS lo consentono), ma provare sempre. Sarai quindi pronto a ripristinare una versione precedente, se necessario.