Ecco il framework
Abbiamo un database SQL in cui vive il nostro modello di database. Dall'altro lato, c'è un mucchio di codice che usa e riempie quel database.
Ecco cosa vogliamo
- Vogliamo inserire sia il modello del database che il codice del software sotto il controllo della versione per poter andare avanti e indietro all'interno versioni differenti.
- Dal momento che il nostro modello di database diventa sgradevole, vogliamo uno strumento grafico che ci assista con la modellazione logica del database e che crei i nostri script SQL DLL
Questo post riguarda la domanda su come soddisfare entrambi questi requisiti allo stesso tempo. Personalmente, tendo a saltare il requisito per lo strumento grafico e semplicemente a scrivere il nostro modello di database dei fori all'interno degli script SQL e aggiungerli a git. Tuttavia, è molto difficile mantenere il modello mentre il modello diventa più complicato e (facile) i cambiamenti logici possono essere enormi cambiamenti di codice.
Ecco la nostra "soluzione" corrente
Il nostro codice software è sotto controllo di versione con git. La nostra logica il modello di database viene invece mantenuto con PowerDesigner, che porta (con alcune limitazioni) il proprio controllo di versione. Alla fine della giornata, generiamo le nostre istruzioni DDL SQL dal modello logico.
Ecco i nostri problemi con la situazione attuale
Anche se il codice è sotto controllo di versione, lo sviluppo del codice è in qualche modo scollegato dallo sviluppo del modello di database. Una modifica di un oggetto nel modello di database logico (come la modifica del nome di una colonna) è non visibile in git. Anche se eseguiamo il checkout di una determinata versione in git, è necessaria un'ulteriore mappatura che ci indichi quale versione di modello di database logico che devo usare. Inoltre, filiali in git non può essere mappato a rami all'interno di PowerDesigner, il che rende caotico lo sviluppo.
Ecco alcune idee di unificazione che abbiamo trovato
Exporting the logical model from PowerDesigner as (XML) and put it under version control in git.
Qui, so quale versione del codice si riferisce a quale versione di PowerDesigner, dal momento che posso semplicemente importare il codice XML. comunque, il git diffs sull'XML sono inutili e la fusione con diversi modelli logici in git è senza speranza. Quindi, ci deve essere una fusione all'interno di git e all'interno di PowerDesigner. Inoltre, devo esportare il modello in un XML per ogni commit che comporta modifiche sul modello del database (che sono purtroppo abbastanza frequenti) e quali rallenta molto il processo di sviluppo. Inoltre, i bug sono difficili da traccia, perché devo cercare il mio codice con git e il mio modello logico all'interno di PowerDesigner separatamente.
Put the database scripts generated by PowerDesigner under version control.
Qui, le differenze di git hanno un significato e posso mettere in relazione i cambiamenti del codice proprio per le modifiche del modello logico. Ma non posso andare ripristinare una versione in PowerDesigner solo con gli script del database generati. Quindi, di nuovo, ho bisogno di esportare l'XML del modello e ho gli stessi problemi di quelli precedenti.
Ecco le mie domande
-
Come si collega il mondo del codice, il mondo del database logico modellazione e il mondo del controllo della versione?
-
È fattibile chiudere i database complessi su uno strumento grafico e codificare tutto con gli script SQL?
-
Quali sono i buoni modelli di lavoro per mantenere questi due repository e coordinare gli sviluppatori?