I want to add databases (traditional client/server RDBMS's like Mysql/Postgresql as opposed to NoSQL, or embedded databases) to my toolbox as a developer.  I've been using SQLite for simpler projects with only 1 client, but now I want to do more complicated things (ie, db-backed web development).  I usually like following agile and/or test-driven-development principles.  I generally code in Perl or Python.  Questions:How do I test my code such that each run of the test suite starts with a 'pristine' state?  Do I run a separate instance of the database server every test?  Do I use a temporary database?How do I design my tables/schema so that it is flexible with respect to changing requirements?  Do I start with an ORM for my language?  Or do I stick to manually coding SQL?  One thing I don't find appealing is having to change more than one thing (say, the CREATE TABLE statement and associated crud statements) for one change, b/c that's error prone.  On the other hand, I expect ORM's to be a low slower and harder to debug than raw SQL.What is the general strategy for migrating data between one version of the program and a newer one?  Do I carefully write ALTER TABLE statements between each version, or do I dump the data and import fresh in the new version? 
How do I develop database-utilizing application in an agile/test-driven-development way?
database