Я разрабатываю базу следующим образом. Есть две папки:
entity (сущности базы)

и migrations (история изменений)

В entity храню SQL-запросы на создание каждой сущности в отдельности (например в одном файле может быть таблица и все функции к ней относящиеся или вид с функциями и т.п.).
В migrations храню в хронологическом порядке изменения структуры базы данных.
В итоге, когда нужно внести изменения делаю следующее:
1) делаю в migrations новый файл
2) этот файл прогоняю на тестовой базе, чтобы проверить отсутствие ошибок
3) в entity вношу все изменения из этого файла
Недостатки:
1) Приходится вносить в двух местах одни и те же изменения.
2) Не очень удобная отладка (приходится постоянно создавать тестовую базу на которой все проверять, в том числе работу новой версии программы, которая обращается к базе).
Есть ли варианты разработки базы более удобные, чем моя?
Надо заметить, что продакшн-баз много и на каждой надо будет обновлять структуру базы до последней версии.