Наряду с учетом множества хороших и разумных ответов здесь, я бы также добавил, что может быть полезным что-то вроде миграции ActiveRecord (из Ruby On Rails, но вы можете просто использовать библиотеку) , Он абстрагирует такие вещи, как создание / изменение таблиц, соответствующие типы столбцов, более простое управление индексами и (в определенной степени) упорядочение в довольно простой описательный язык.
Хранимые процедуры и триггеры в значительной степени игнорируются, но если вы работаете с кроссплатформенностью, такая функциональность, вероятно, в любом случае должна быть на уровне кода.
Из любопытства я переключился между Oracle, MS SQL, MySQL и SQLite с одним и тем же набором миграций, и худшая проблема, которую я обнаружил, заключалась в том, чтобы убедиться, что имена моих столбцов и таблиц не находятся в объединении зарезервированных слов. списки по БД.