Распространенным решением является включение номера версии в базу данных. Если у вас есть таблица с другими системными данными, добавьте ее туда или создайте таблицу с одной записью только для хранения номера версии БД. Затем при каждом запуске программы проверьте, не меньше ли версия базы данных, чем ожидаемая. Если это так, выполните необходимые команды SQL CREATE, ALTER и т. Д., Чтобы ускорить его. Есть сценарий или функция для каждого изменения версии. Поэтому, если вы видите, что база данных в настоящее время имеет версию 6, а код ожидает версию 8, выполните обновление 6-7 и обновление 7-8.
Другой метод, который мы использовали в одном проекте, над которым я работал, состоял в том, чтобы доставлять только схему, без базы данных с кодом. Каждый раз, когда вы устанавливаете новую версию, установщик также устанавливает последнюю копию этой новой пустой базы данных. Затем, когда программа запустила ее, она сравнивает текущую схему базы данных пользователя с новой схемой базы данных и определяет, какие изменения базы данных были необходимы на лету. Например, если в таблице «ссылочной схемы» Foo есть столбец с именем Bar, а в текущей базе данных пользователя нет столбца Bar, мы сгенерируем «изменить таблицу Foo add Bar ...» и выполнить ее. Хотя написание первого проекта программы для этого было довольно трудоемким, после того, как мы это сделали, мы практически не нуждались в обслуживании, чтобы поддерживать схему БД в актуальном состоянии. Преобразование было сделано на лету.
Обратите внимание, что эта схема не обрабатывает изменения БД, которые требуют изменения значений данных, например, если вы добавляете новый столбец, который должен быть первоначально заполнен, выполняя некоторые вычисления для данных из других таблиц или некоторые другие. Но если вы можете генерировать новые данные из старых данных, это должно означать, что новые данные избыточны и ваша база данных не нормализована. Я не думаю, что ситуация когда-либо возникала для нас.