Så många människor försöker göra den här typen av saker (diff-scheman). Min åsikt är
- Källkoden går in i ett versionskontrollverktyg (Subversion, CSV, GIT, Perforce ...). Behandla det som om det var Java- eller C-kod, det är verkligen inte annorlunda. Du bör ha en installationsprocess som checkar ut den och tillämpar den på databasen.
- DDL ÄR KÄLLKOD. Det går också in i versionskontrollverktyget.
- Data är ett grått område - uppslagstabeller kanske borde finnas i ett versionskontrollverktyg. Programgenererad data borde absolut inte göra det.
Sättet jag gör saker nu för tiden är att skapa migreringsskript som liknar Ruby on Rails-migrering. Lägg din DDL i skript och kör dem för att flytta databasen mellan versioner. Gruppera ändringar för en version i en enda fil eller uppsättning filer. Sedan har du ett skript som flyttar din applikation från version x till version y.
En sak jag aldrig någonsin gör längre (och jag brukade göra det tills jag lärde mig bättre) är att använda alla GUI-verktyg för att skapa databasobjekt i min utvecklingsmiljö. Skriv DDL-skripten från dag 1 - du kommer att behöva dem hur som helst för att marknadsföra koden till test, produktion etc. Jag har sett så många människor som använder GUI:erna för att skapa alla objekt och när det kommer att släppas det finns en scrabble att försöka producera skript för att skapa/migrera schemat korrekt som ofta inte testas och misslyckas!
Alla kommer att ha sina egna preferenser för hur man gör detta, men jag har sett mycket av det gjort dåligt under åren som bildade mina åsikter ovan.