We have a great process for upgrading our clients' websites as far as updating html/js code and assets is concerned (by using Subversion) that we are very happy with.

However, when it comes to upgrading databases, we are without any formal process. 

If we add new tables/fields to our development database, when it comes to rolling it out to the production server we have to remember our changes and replicate them. We cannot simply copy the development database on top of the production database as client data would be lost (e.g. blog posts, account info etc).

We are also now in the process of building a web-app which is going to come across the same issues.

Does anyone have a solution that makes this process easier and less prone to error? How do big web-apps get round the problem?

Thanks.