Così tante persone cercano di fare questo genere di cose (schemi differenziali). La mia opinione è
- Il codice sorgente viene inserito in uno strumento di controllo della versione (Subversion, CSV, GIT, Perforce ...). Trattalo come se fosse codice Java o C, in realtà non è diverso. Dovresti avere un processo di installazione che lo verifichi e lo applichi al database.
- DDL È IL CODICE SORGENTE. Va anche nello strumento di controllo della versione.
- I dati sono un'area grigia:le tabelle di ricerca potrebbero essere in uno strumento di controllo della versione. I dati generati dall'applicazione certamente non dovrebbero.
Il modo in cui faccio le cose in questi giorni è creare script di migrazione simili alle migrazioni di Ruby on Rails. Inserisci il tuo DDL negli script ed eseguili per spostare il database tra le versioni. Raggruppa le modifiche per una versione in un unico file o set di file. Quindi hai uno script che sposta la tua applicazione dalla versione x alla versione y.
Una cosa che non faccio mai più (e lo facevo fino a quando non ho imparato meglio) è utilizzare qualsiasi strumento GUI per creare oggetti di database nel mio ambiente di sviluppo. Scrivi gli script DDL dal giorno 1 - ne avrai comunque bisogno per promuovere il codice da testare, produrre ecc. Ho visto così tante persone che usano le GUI per creare tutti gli oggetti e al momento del rilascio c'è uno scrabble da provare a produrre script per creare/migrare correttamente lo schema che spesso non vengono testati e falliscono!
Ognuno avrà le proprie preferenze su come farlo, ma ho visto molte cose fatte male nel corso degli anni che hanno formato le mie opinioni sopra.