Лучшие методы управления изменениями базы данных

В качестве архитектора базы данных, разработчика и консультанта есть много вопросов, на которые можно ответить. Один, хотя меня недавно спросили и до сих пор не могут ответить хорошо, это...

"Что является одним из лучших методов или методов для сохранения изменений в базе данных, которые были документированы, организованы и, тем не менее, способны эффективно развертываться в среде с одним разработчиком или несколькими разработчиками".

Это может включать хранимые процедуры и другие объектные скрипты, но особенно схемы - от документации, до новых сценариев физического обновления, для развертывания, а затем полного круга. Есть приложения, чтобы это произошло, но требуют крючков схемы и накладных расходов. Я бы предпочел узнать о методах, используемых без большого участия сторонних сторон.

Ответы

Ответ 1

Самый простой способ, который я видел, это сделать без помощи внешнего инструмента, - это создать "патч схемы", если хотите. Патч схемы - это просто t-sql script. Патчу схемы присваивается номер версии в script, и этот номер сохраняется в таблице в базе данных для получения изменений.

Любые новые изменения в базе данных включают в себя создание нового патча схемы, который затем можно запустить в последовательности, которая затем определит, какая версия находится в настоящее время в базе данных, и запускать все заплатки схемы между ними. Впоследствии таблица версий схемы обновляется с любой датой/временем, в течение которого патч был выполнен для сохранения для следующего прогона.

Хорошая книга, которая вписывается в такие детали, называется Рефакторинг баз данных.

Если вы хотите использовать внешний инструмент, вы можете посмотреть проект Ruby Migrations или аналогичный инструмент в С#, называемый Migrator.NET. Эти инструменты работают, создавая классы С# classes/ruby ​​с миграцией "вперед" и "назад". Эти инструменты более функциональны, потому что они знают, как идти вперед, а также назад в патчах схемы. Однако, как вы заявили, вас не интересует внешний инструмент, но я думал, что добавлю это для других читателей.

Ответ 3

В моем случае я генерирую script каждый раз при изменении базы данных, я назвал script как 00001.sql, n.sql, и у меня есть таблица с номером последнего script У меня есть исполнение, Вы также можете увидеть Документацию по базам данных

Ответ 4

пока вы добавляете столбцы/таблицы в свою базу данных, это будет непростая задача, предварительно написав эти изменения в sql файлах. вы просто выполняете их. возможно, у вас есть какой-то заказ на их выполнение.

хорошим решением было бы сделать один файл за столом, чтобы все изменения, принадлежащие этой таблице, были видны тому, кто когда-либо работает над таблицей (например, работает над классом). то же самое справедливо для хранимых процедур или представлений.

более сложная задача (и, следовательно, возможно, инструменты будут хороши) - это отступить. если вы просто добавили таблицы/столбцы, возможно, это не будет большой проблемой. но если вы сбросили столбцы на обновление, и теперь вам нужно отменить свое обновление, данных больше нет. вам нужно будет получить эти данные из резервной копии. но имейте в виду, если у вас есть более чем несколько таблиц, это может быть большой задачей, и в нормальном случае вы должны быстро отменить свое обновление!

если вы можете просто восстановить резервную копию, тогда это будет хорошо в данный момент. но, если вы обновляетесь в понедельник, ваши клиенты работают до среды, а затем они видят, что некоторые данные отсутствуют (которые вы просто выпали из таблицы), тогда вы не смогли бы просто восстановить старую базу данных.

У меня есть модельный подход в моем сознании (извините, не реализовано на данный момент), в котором изменения схемы "моделируются" (например, на xml), и во время обновления процессор (например, aС# program) создает все необходимо "sql" и, например, перемещает данные в "dropDatabase". данные могут находиться там, и если по какой-то причине мне нужно восстановить некоторые данные, я могу просто сделать это с процессором. Я думаю, что в течение некоторого времени (лет) этот подход не так плох, потому что иначе разработчики не касаются "старых" таблиц, потому что они больше не знают, нужна ли таблица или столбец. при таком подходе вы не рискуете слишком много, если что-то уродите!

Ответ 5

Что я делаю:

  • Все команды DDL, необходимые для воссоздания схемы (и хранимых процедур, индексов и т.д.), находятся в script.
  • Чтобы убедиться, что script в порядке, он время от времени тестируется (создайте базу данных, запустите script и восстановите резервную копию и проверьте, что база данных работает хорошо).
  • Для управления изменениями, script хранится в системе управления версиями (обычно я использую Subversion).

Фокус в том, что если базу данных нельзя сбить, чтобы воссоздать, скажем, добавленный столбец, у меня есть два изменения, ALTER TABLE + изменение в script, Немного больше работы, но в долгосрочной перспективе выигрывает.