Mike Willbanks Blog:  http://blog.digitalstruct.com Twitter : mwillbanks IRC : lubs Talk:  http://joind.in/986 Handling Database Deployment ZendCon Unconference 2009
What We'll Cover (and not cover) The [Somewhat] Prerequisites
Why Use Database Change Management
Why To Not Use Database Abstraction Layer Migrations Even You Doctrine! DBDeploy and LiquiBase How It Works (under the hood)
Basic Syntax
Recommended Structure
The [Somewhat] Prerequisites You should be using an issue tracking system.
You should be using source code management.
You already know how you are deploying your code.
Why Database Change Management Do you version your code?  Same reasons apply to database deltas (or change sets).
Deltas typically are a part of a code change.
Ensures the correlation between code revisions.
Allows the automation of changes.
Ensure you are keeping environments consistent.
Allows for reverting back to previous versions (some voodoo magic may be required).
The Traditional Way - #fail Developer writes code and applies database change locally.
Developer forgets to note change on bug tracking ticket or notify anyone of the change or DBA misses the change, etc.
Code deployment and database deployment happens.
System is broken... #fail
Developer attempts to figure out what happened, “oops factor”.
A Better Way Developer writes code and writes a database delta.
Developer tests changes locally.
Code and Database Delta is committed against a ticket (or at least together).
Pre-Deployment Database Changes are Applied.
Code Deployment is pushed out.
Post-Deployment Database Changes are Applied.
System === happiness.
Some Process  Theory Simplified Database Pre-Deployment Apply database changes compatible with current code, in preparation for new code.

Handling Database Deployments