Я уверен, что изменения схемы всегда аддитивны. Поэтому я не удаляю столбцы и таблицы, потому что это уберет данные и не может быть отменено позже. Таким образом, код, который использует базу данных, можно откатить без потери данных или функциональности.
У меня есть скрипт миграции, который содержит операторы, которые создают таблицы и столбцы, если они еще не существуют, и заполняют их данными.
Скрипт миграции запускается всякий раз, когда производственный код обновляется и после новых установок.
Когда я хотел бы что-то отбросить, я делаю это, удаляя их из скрипта установки базы данных и скрипта миграции, чтобы эти устаревшие элементы схемы были постепенно исключены в новых установках. С тем недостатком, что новые установки не могут перейти на более старую версию перед установкой.
И, конечно, я выполняю DDL с помощью этих сценариев, а не напрямую в базе данных, чтобы поддерживать синхронизацию.