Data migrations coupled to the model code

It seems to me that data migrations have a serious flaw when refactoring
models and the database schema – they are coupled to the model class
relationships.

If I’m trying to get rid of old relationships in favor of new changes
to the schema, I eliminate the ability to back down through previous
data migrations, or even to drop the database and migrate from scratch.

Are there techniques for dealing with this? Should I be using something
other than the model relationships in the data migration? Should I be
checking respond_to? in the migration? (In which case I would be forced
to abandon data.)