Zoveel mensen proberen dit soort dingen te doen (diff-schema's). Mijn mening is
- Broncode gaat naar een versiebeheertool (Subversion, CSV, GIT, Perforce ...). Behandel het alsof het Java- of C-code is, het is echt niet anders. Je zou een installatieproces moeten hebben dat het uitcheckt en toepast op de database.
- DDL IS BRONCODE. Het gaat ook naar de versiebeheertool.
- Gegevens zijn een grijs gebied - opzoektabellen zouden misschien in een versiebeheerprogramma moeten staan. Applicatie gegenereerde data zou dat zeker niet moeten doen.
De manier waarop ik tegenwoordig dingen doe, is om migratiescripts te maken die vergelijkbaar zijn met Ruby on Rails-migraties. Zet uw DDL in scripts en voer ze uit om de database tussen versies te verplaatsen. Groepeer wijzigingen voor een release in een enkel bestand of een set bestanden. Dan heb je een script dat je applicatie van versie x naar versie y verplaatst.
Een ding dat ik nooit meer doe (en ik deed het tot ik beter leerde) is het gebruik van GUI-tools om database-objecten in mijn ontwikkelomgeving te maken. Schrijf de DDL-scripts vanaf dag 1 - je hebt ze hoe dan ook nodig om de code te promoten om te testen, te produceren enz. Ik heb zoveel mensen gezien die de GUI's gebruiken om alle objecten te maken en de releasetijd is dat er een scrabble is om te proberen te produceren scripts om het schema correct te maken/migreren die vaak niet worden getest en falen!
Iedereen zal zijn eigen voorkeur hebben voor hoe dit te doen, maar ik heb in de loop der jaren veel van het slecht gedaan, wat mijn mening hierboven heeft gevormd.