Ищете решение для управления версиями базы данных - PullRequest
10 голосов
/ 17 февраля 2010

Описание проблемы:

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

Мы не можем потерять данные - поэтому мы не можем использовать «удаленную таблицу». Мы можем использовать только «изменить таблицу».

Наша фактическая «процедура создания версий БД» выглядит следующим образом:

  • У нас есть таблица с именем [actual_version], которая содержит актуальную версию установленной схемы БД
  • У нас есть файл с именем "changes_script.sql", который содержит все изменения базы данных - этот файл хранится в SVN

Когда разработчик хочет зафиксировать новую ревизию в SVN, он должен изменить change_script.sql, добавив блок:

if ([acctual_version].version < "23")) {
    --- sql script ----
updateVersionTo("23")
end if 

Когда мы хотим обновить схему базы данных, мы просто «выполняем» change_scripts.sql

У кого-нибудь есть идея получше?

Ответы [ 6 ]

5 голосов
/ 17 февраля 2010

Red Gate Sql Compare может сравнить две таблицы (или две коллекции сценариев DDL, или один набор сценариев с таблицей и т. Д.) И сгенерировать сценарий миграции для вас. ,

Если вы работаете в Ruby, вы можете заглянуть в "Ruby Migrations ", который является формализованным способом создания версий БД в коде. (В .NET есть похожие вещи, такие как RikMigrations и Fluent Migrator , и я уверен, что подобные вещи существуют и для других платформ).

Как сказал Рэнди Миндер, вы также можете использовать VS DB Edition для управления своей схемой, хотя я думаю, что инструменты RedGate работают так же легко и не привязывают вас к конкретной платформе или IDE.

3 голосов
/ 17 февраля 2010

Я делаю это очень похоже , но использую расширенные свойства базы данных вместо таблицы для отслеживания версии метаданных, а шаги обновления определяются в приложении, а не в одном скрипте. Большинство шагов обновления просто execute script Upgrade.vX.Y.sql.

Я считаю, что ваш подход превосходит инструменты сравнения схем (включая развертывание VS DB) по нескольким причинам:

  • Я не доверяю инструментам сравнения схем, изменяющим очень большие таблицы, у меня скорее есть протестированный скрипт, специально разработанный для моей таблицы записей 150B.
  • Сравнение схем не обрабатывает удаление устаревших объектов
  • Если схема приложения была изменена на клиентском сайте, инструмент сравнения будет слепо пытаться обновить ее, но измененная схема может потребовать особого подхода: проверка изменений, оценка воздействия, выставление счетов за дополнительную работу.
1 голос
/ 17 февраля 2010

Вы описываете процесс, который используется во многих девелоперских магазинах, я вполне уверен - в том числе и в моей компании.

Если вы хотите придерживаться этого, один инструмент, который нам помог, это SSW SQL Deploy , который позволяет вам собирать целую кучу сценариев (у нас есть папка «изменения» для каждой версии, и файлы имеют метки с «001_something.sql» до «999_somethingelse.sql») и выполняют их как единое целое с базой данных. Вы также можете включить это в свои приложения .NET через API или запустить из командной строки во время установки.

Наивысшим достижением спектра является принятие всего процесса управления изменениями в базе данных, что-то вроде DB Ghost от Innovartis, который представляет собой нечто большее, чем просто набор инструментов. Но это потребовало бы от вас и ваших разработчиков тщательно усвоить этот стиль, жить и дышать им. Очень интересно, но до сих пор мне не удалось убедить моих разработчиков и боссов :-( Может быть, вам повезло больше?

1 голос
/ 17 февраля 2010

Вы слышали о Visual Studio Database Edition? Если вы используете VS Team Suite или VS Developer Edition, вы получаете его бесплатно. Это инструмент управления схемой базы данных, который управляет вашей версией схемы, позволяет выполнять рефакторинг, сборки, анализ кода и развертывание.

Мы используем его для управления схемами и развертываниями нашей БД. Отличный инструмент.

0 голосов
/ 27 июля 2013

Вы смотрели на Liquibase? http://www.liquibase.org/ Он управляет версионированием для вас с поддержкой отката и отката

0 голосов
/ 14 января 2013

Вы можете использовать инструменты миграции баз данных, такие как:

  1. .NET Migrator
  2. FluentMigrator
  3. Entity Framework Code First Migrations

Эти инструменты позволяют работать с версиями базы данных.

...