Нужны для того, чтобы поднять проект другому разработчику или вам же на другой машине, например для staging сервера с тестовыми данными.
Структура БД храниться вместе с кодом.
Миграции не зависят от типа БД, на продакшене к примеру PosgreSQL - локально SQLite.
Таскать по машинам объемную базу в виде бэкапов может быть очень накладно (тем более если это совершенно разные бд, как в моем примере выше).
Кроме того задача миграций - иметь быстрый способ откатить изменения в БД на несколько шагов назад/вперед, до определенной стадии разработки.
В том числе до определенной версии - rake db:rollback VERSION=X
Это основная часть доводов, почитайте оф. документацию по миграциям и best practices.
Есть и обходной путь со схемой БД, вы можете поднять базу из одной единственной миграции, предварительно ее создав.