This is one of those ones that everyone knows
they should be doing but very often they just file it away in the
“too hard” basket. The problem you’ve got is that
many (most?) applications simply won’t run without their
database. If you’re not versioning the database, what you end
up with is an incomplete picture of the application which in
practice is rendered entirely useless.
Most VCS systems work by simply versioning files
on the file system. That’s just fine for your typical app
files like HTML page, images, CSS, project configuration files and
anything else that sits on the file system in nice discrete little
units. Problem is that’s not quite the way relational
databases work. Instead, you end up with these big old data and log
files which encompass a whole bunch of different objects and data.
This is pretty messy stuff when it comes to version control.
SQL Source Control boxWhat changes the
proposition of database versioning these days is the accessibility
of tools like the very excellent SQL Source Control from Red Gate.
I wrote about this in detail last year in the post about Rocking
your SQL Source Control world with Red Gate so I won’t delve
into the detail again; suffice to say that database versioning is
now easy!
Honestly, if you’re not versioning your
databases by now you’re carrying a lot of risk in your
development for no good reason. You have no single source of truth,
no rollback position and no easy collaboration with the team when
you make changes. Life is just better with the database in source
control :)