База данных состоит их схемы и данных. Данные могут быть разные: управляющие, пользовательские и т.п. За схему и управляющие данные (справочники, например) отвечает миграция. С этим как я понял у вас Ok.
Зависимость кода от данных - это очевидный антипаттерн дизайна, который необходимо устранить. Тем более, если код зависит от пользовательских данных, типа ID пользователя.
С другой стороны, разработчики предпочитают работать с данными, приближенными к боевым. Однако, здесь могут быть риски, например, отправка тестового письма реальному пользователю. Процесс выглядит обычно так:
1. сливаем дамп с боевой базы данных;
2. загружаем его на тестовый сервер;
3. запускаем процедуру обфускации (удаления чувствительных пользовательских данных);
4. загружаем управляющие данные, соответствующие тестовому окружению (если это нужно).