Lavoro su un progetto che utilizza un database SQL come back-end e un'app desktop come front-end. Facciamo le pubblicazioni su base regolare e, come parte di una versione, il nostro cliente ha bisogno di aggiornare il proprio server SQL.
La nostra attività richiede che siamo aggiornabili dalla versione 1.x alla versione 1.y, e il modo in cui lo abbiamo fatto finora è seguire uno schema semplice per dozzine / centinaia di tabelle:
- SE NON ESISTE (XXX) CREA TABELLA / VISUALIZZA YYY ...
- ALTER TABLE (XXX) AGGIUNGI COLONNA (WWW) ...
- CREATE INDEX (ZZZ) sulla tabella XXX (se necessario)
- Quindi su ...
Il problema che vedo con questo è che i passaggi descritti sopra sono tutti strutturati in una relazione uno a uno con il tavolo che viene creato. Questo va bene per i database più semplici che non hanno vincoli, ma diventa un dolore quando chiavi estranee / trigger / qualcosa di complesso viene coinvolto.
Mi chiedevo se esistesse un modello che potesse aiutarmi a ripulire tutto e ad apportare modifiche al mio script più facilmente. Stavo pensando qualcosa sulla falsariga di seguire questi passaggi per ogni tabella nel database:
- eseguire la pulizia da qualsiasi "vecchia" versione
- crea / aggiorna tutte le tabelle / colonne (senza vincoli)
- crea / aggiorna tutte le viste in base alle tabelle
- crea / aggiorna tutte le chiavi esterne / i vincoli
- crea / aggiorna tutti gli indici
- crea / aggiorna tutti i trigger
- ...
Uso uno strumento per unire tutti i file SQL nel mio repository in uno, ma la rima / ragione a cui il file viene unito a quel punto sta diventando poco chiaro - spesso mi arrendo e metto in discussione qualcosa che dice "include file X direttamente prima / dopo il file Y ". Sta diventando non gestibile (posso ancora risolvere i problemi, ma voglio essere in grado di trasferire questa responsabilità).
È l'ultima seccatura che voglio essere in grado di evitare. Voglio essere in grado di creare un nuovo tavolo semplicemente rilasciando uno script con il contenuto "CREATE TABLE X ..." in una directory "Tables" e richiamarlo.
Ci sono dei modelli là fuori che possono aiutarmi? Sto davvero cercando una sorta di munizione che posso usare quando la propongo ai miei colleghi dicendo "vedi - c'è una soluzione a questo cluster * e QUESTO è come le altre aziende lo affrontano".