Sto lavorando a un certo numero di applicazioni Delphi che dovranno aggiornare le proprie strutture di database sul campo quando vengono rilasciate nuove versioni e quando gli utenti scelgono di installare moduli aggiuntivi. Le applicazioni utilizzano una varietà di database incorporati (DBISAM e Jet al momento, ma questo potrebbe cambiare).Controllo delle versioni del database nelle applicazioni installate usando Delphi
In passato l'ho fatto con DBISAM utilizzando i numeri di versione utente che possono essere memorizzati con ciascuna tabella. Ho spedito un set di file di database aggiuntivo e vuoto e, all'avvio, ho confrontato i numeri di versione di ogni tabella utilizzando FieldDefs per aggiornare la tabella installata, se necessario. Mentre questo funzionava, mi è sembrato maldestro dover spedire una copia di riserva del database e le versioni più recenti di DBISAM hanno cambiato la metodologia di ristrutturazione delle tabelle in modo che sia necessario riscriverlo comunque.
Sono in grado di vedere due modi di implementare questo: memorizzare un numero di versione con il database e utilizzare gli script DDL per passare da versioni precedenti a versioni più recenti o memorizzare una versione di riferimento della struttura del database all'interno dell'applicazione, confrontando il riferimento al database all'avvio e l'applicazione genera comandi DDL per aggiornare il database.
Penso che probabilmente dovrò implementare parti di entrambi. Non voglio che l'applicazione diff diff tra il database e la struttura di riferimento ogni volta che l'applicazione si avvia (troppo lento), quindi ho bisogno di un numero di versione della struttura del database per rilevare se l'utente sta utilizzando una struttura obsoleta. Tuttavia, non sono sicuro di potermi fidare degli script pre-scritti per eseguire l'aggiornamento strutturale quando il database potrebbe essere stato parzialmente aggiornato in passato o quando l'utente potrebbe aver cambiato la struttura del database, quindi sono propenso a utilizzare un diff di riferimento per l'aggiornamento effettivo.
Ricercare la domanda Ho trovato un paio di strumenti per il controllo delle versioni del database ma sembrano tutti indirizzati a SQL Server e sono implementati al di fuori dell'applicazione reale. Sto cercando un processo che sarebbe strettamente integrato nella mia applicazione e che potrebbe essere adattato ai diversi requisiti del database (so che dovrò scrivere adattatori, classi discendenti personalizzate o codice evento per gestire le differenze in DDL per vari database, che non mi infastidiscono).
Qualcuno sa di qualsiasi cosa al largo della piattaforma che fa questo o, in mancanza, qualcuno ha qualche idea su:
Il modo migliore per conservare una versione di riferimento di una struttura di database relazionale generica all'interno di un'applicazione .
Il modo migliore per diff il riferimento rispetto al database effettivo.
Il modo migliore per generare DDL per aggiornare il database.
Grazie per una risposta estremamente dettagliata e utile. Ci vorrà un giorno o due finché non riesco a digerire tutto. –