То, что вы пытаетесь сделать, в двух словах, это версия вашей схемы базы данных, чтобы она соответствовала коду при изменении ситуации.Важнейшая часть способности сделать это - уметь отслеживать изменения в схеме БД, а также уметь отслеживать текущее состояние схемы БД (т. Е. В какой она версии)
Одним из способов отслеживания изменений в схеме является ручной сценарий всех изменений в схеме.Эти сценарии изменений по сути являются вашими "различиями" между версиями схемы.Другим способом создания этих файлов изменений может быть использование программы, которая может генерировать различия между двумя базами данных или между базой данных и скриптом создания.Теоретически, вы должны иметь возможность разработать сценарий подключения перед фиксацией, который может генерировать сценарий изменения из текущей базы данных для этой рабочей копии и предыдущей базы данных для этой рабочей копии, но это не тривиальная задача.
После того как ваша БД будет версионирована, вам нужно решить проблему применения этих изменений в Update
.Для этого вам потребуется разработать хук после обновления, который сможет просматривать базу данных (возможно, какую-то таблицу Version
внутри нее, которая связана с идентификатором набора изменений Mercurial) и определять, какие сценарии необходимо запускать длячтобы обновлять БД.
Поскольку Mercurial позволяет вам обновляться до предыдущей версии, вам придется либо вносить только неразрывные изменения в вашу базу данных, либо просто не разрешать (в социальном смысле илитехнический смысл) рабочая рабочая копия для обновления до предыдущих версий.Независимо от того, как вы справляетесь с этим, сценарий перехвата после обновления, который выполняет фактические обновления БД, вероятно, должен быть достаточно умным, чтобы попытаться применить уже примененные сценарии изменения БД.
Очевидно, существует рядпроблем, которые нужно решить, и множество тестов, которые нужно выполнить, чтобы все это заработало, и это никоим образом не является готовым решением для вас, но оно должно помочь вам в автоматизации ваших обновлений БД для их сохранения.в соответствии с вашим кодом.Удачи!