Sto affrontando un problema di metodologia di sviluppo concettuale che speravo potessi aiutarmi con. In primo luogo, un po 'di background.
Sfondo
Il progetto che sto sviluppando è un'applicazione di nicchia che contiene un database di informazioni e il pubblico di destinazione per la mia applicazione sono privati nella fascia inferiore della scala di competenza tecnica. In effetti, questa è la ragione principale del mio progetto: esistono molte opzioni simili in questo campo, ma la stragrande maggioranza sono applicazioni fragili e complicate che richiedono un alto grado di esperienza sia di programmazione che di database e sysadmin solo per continuare a funzionare. Peggio ancora, anni o anche decenni di scarsa manutenzione e "miglioramento" da parte di programmatori dilettanti che hanno capito a malapena quello che stavano facendo significa che molte di queste applicazioni sono semplicemente al di là delle capacità di un non-professionista di mantenere.
Il motivo per cui ho iniziato questo progetto è stato quello di dare loro una bassa barriera di accesso alternativo che potrebbero ragionevolmente estendere e personalizzare tramite configurazione piuttosto che programmazione, per centralizzare e minimizzare la manutenzione. Io stesso ho programmato per quasi 20 anni ma non fino a poco tempo fa in qualità di professionista: sono in realtà un ingegnere civile, ma la mia principale esperienza professionale è di essere un cliente / rappresentante tecnico per i sistemi di ingegneria e gestione patrimoniale di grandi imprese. Quindi, per favore, scusami se non sono aggiornato al 100% con tutto il gergo professionale o accademico.
problema
Il mio grande problema concettuale è come in modo sicuro e invisibile all'utente finale unire le modifiche al database come parte di un processo di aggiornamento. Fondamentalmente, mentre rilascio le versioni principali, a volte potrebbero essere apportate estensioni a tabelle o nuove tabelle al modello di database, che dovrà essere implementato come parte del processo di patching. In passato, l'ho sempre fatto solo sui miei server di sviluppo e il mio approccio era abbastanza casuale e manuale.
Come devo procedere per quantificare, preparare e implementare le modifiche al database richieste come parte della mia applicazione? Come riferimento, il mio programma è scritto in C # e utilizzo SQL Server (distribuito all'utente incluso nell'applicazione come SQL Server Compact Edition). Non ho ancora selezionato una piattaforma di patching da utilizzare, poiché la possibile compatibilità con qualsiasi metodologia che ho qui può influenzare la mia scelta. I miei pensieri sono che quando decido di fare un rilascio, ci sono probabilmente alcuni strumenti che devo usare per preparare una differenza di database tra l'ultima versione e la versione corrente e preparare uno script SQL da eseguire. Quindi, ad un certo punto del processo di installazione, deve eseguire lo script SQL e aggiornare il database.
Sembra semplice, ma non sono davvero sicuro se sia possibile. La maggior parte degli strumenti che riesco a trovare per i database là fuori sembrano indirizzati alle applicazioni di livello Enterprise e agli amministratori di database, e ho difficoltà a capire se possono effettivamente svolgere la semplice attività di cui ho bisogno.
Sono sulla buona strada per fare questo o c'è un approccio migliore?