Решение скорее административное, чем техническое :)
Общее правило простое, в проекте должны быть только древовидные зависимости:
- Всегда должен быть один главный источник схемы, который хранится вместе с исходным кодом проекта в системе управления версиями.
- Все, что затронуто изменением в главном источнике, должно автоматически генерироваться каждый раз при обновлении главного источника, никакое ручное вмешательство не допускается никогда, если автоматическая генерация не работает - исправьте основной источник или генератор, не обновляйте вручную исходный код
- Все повторные генерации должны выполняться одним и тем же человеком, который обновил главный источник, и все изменения, включая изменение основного источника, должны рассматриваться как одна транзакция (один контроль источника, одна сборка / развертывание для каждой уязвимой среды, включая обновление БД)
При принудительном исполнении это дает 100% надежный результат.
Существует, по сути, 3 возможных варианта основного источника
1) Метаданные БД, источники генерируются после обновления БД каким-либо инструментом, подключающимся к работающей БД
2) Исходный код, какой-то инструмент генерирует схему SQL из источников, аннотируется особым образом, а затем SQL запускается на БД
3) DDL, схема SQL и исходный код генерируются каким-либо инструментом
4) используется другое описание (например, текстовый файл, читаемый специальным скриптом Perl, генерирующим как схему SQL, так и исходный код)
1,2,3 одинаково хороши при условии, что необходимый вам инструмент существует и не слишком дорогой
4 - это универсальный подход, но его следует применять с самого начала проекта, и он требует дополнительных затрат в несколько тысяч строк кода на незнакомом языке для поддержки