I'll second the use of Liquibase. Writing changeSets is simple, and it's very easy to bring a developer's fresh database up to speed by simply letting Liquibase apply all the changeSets in order.
We've found that maintaining a separate "changelog" file for each major release that collects the history of changes for that release and subsequent minor releases is easiest. We also use the Jira ticket # associated with a schema change as the ID of a changeSet, so we can tie changes to feature requests, bug reports, etc.
I've had some good experiences with this integrating with Hibernate.
Re:Database versioning best practices
by anton_gogolev on Monday August 10, 2015 @03:53PM
(#10036853)
Oh, good old "programming in XML".
"Supports XML, YAML, JSON and SQL formats" - from the front page of http://www.liquibase.org/. What more do you want ?
Re:Database versioning best practices
by anton_gogolev on Monday August 10, 2015 @11:42PM
(#10038974)
As if programming in YAML or JSON is any better. And programming in platform-specific SQL, for all non-trivial purposes, ties you to the specific flavor of DBMS.
What I want is a DSL that is a platform-agnostic DSL: terse, typechecked, possibly "compiled" to some IR, with basics of semantic analysis, with support for (or at least awareness of) the quirks of the specific underlying platform.
Which in this case, depending upon your editor, can mean autocomplete and validate as you type. In spite of liquibase's newer YAML and JSON support, XML works very well here.
http://www.liquibase.org/