Описание проблемы:
В нашем проекте у нас есть одна "производственная база данных" и много "devs". Мы хотим знать, как мы можем управлять и установить изменения. У нас уже есть некоторые процедуры, но это занимает много времени и иногда вызывает ошибки.
Мы не можем потерять данные - таким образом, мы не можем использовать "таблицу отбрасывания". Мы можем только использовать, "изменяют таблицу".
Наша фактическая "процедура управления версиями дб" похожа на это:
Когда разработчик хочет фиксировать новый пересмотр на SVN, ему нужно к change_script.sql путем добавления блока:
if ([acctual_version].version < "23")) {
--- sql script ----
updateVersionTo("23")
end if
Когда мы хотим обновить схему базы данных, мы просто "выполняем" change_scripts.sql
У кого-либо есть лучшая идея?
Инструмент Red Gate Sql Compare может сравнивать две таблицы (или два набора сценариев DDL, или один набор сценариев с таблицей, и т. д.) и сгенерируйте для вас сценарий миграции.
Если вы работаете с Ruby, вы можете изучить «Ruby Migrations », который представляет собой формализованный способ управления версиями БД в коде. (В .NET есть похожие вещи, такие как RikMigrations и Fluent Migrator , и я уверен, что аналогичные вещи существуют и для других платформ).
Как сказал Рэнди Миндер, вы также можете использовать VS DB Edition для управления схемой за вас, хотя я думаю, что инструменты RedGate работают так же легко и не привязывают вас к конкретной платформе или IDE.
Вы слышали о Visual Studio Database Edition? Если вы сейчас используете VS Team Suite или VS Developer Edition, вы получаете его бесплатно. Это инструмент управления схемами баз данных, который контролирует версию вашей схемы, позволяет проводить рефакторинг, сборку, анализ кода и развертывание.
Мы используем его для управления нашими схемами БД и развертываниями. Отличный инструмент.
Я бы посоветовал не использовать привязки MPI C++ для любой новой разработки. Сама программа может быть в C++, но вложить дополнительные усилия, чтобы использовать интерфейс C к библиотеке MPI.
Форум MPI отменяет привязки C++. Таким образом, будущие реализации MPI, вероятно, потеряют поддержку C++. Как правило, большинство реализаций скупятся на функции, когда речь идет о C++. Основы будут работать, но такие вещи, как динамические процессы (т.е. нерест), интерфейсы PMPI и так далее, менее хорошо поддерживаются.
Привязки C и Fortran достаточно хорошо поддерживаются всеми основными реализациями и будут поддерживаться в обозримом будущем.
-121--1452240- Я делаю это очень аналогично , но используйте расширенные свойства базы данных вместо таблицы для отслеживания версии метаданных, и шаги обновления определены в приложении, а не в одном сценарии. Большинство шагов обновления - выполнение сценария Upgrade.vX.Y.sql
.
На самом деле я нахожу ваш подход превосходящим инструменты сравнения схем (включая развертывание VS DB) по нескольким причинам:
Я почти уверен, что вы описываете процесс, который используется во многих магазинах разработки, в том числе и в моей компании.
Если вы хотите придерживаться этого, нам помог один инструмент - SSW SQL Deploy , который позволяет вам получить целую кучу скриптов (у нас есть папка «изменения» для каждой версии, и файлы имеют метки от «001_something.sql» до «999_somethingelse.sql») и выполняют их как единое целое с базой данных. Вы также можете включить это в свои приложения .NET через API или запустить из командной строки во время установки.
Наивысший предел спектра - это внедрение всего процесса управления изменениями базы данных, что-то вроде DB Ghost от Innovartis, который представляет собой нечто большее, чем просто набор инструментов. Но для этого вам и вашим разработчикам потребуется полностью усвоить этот стиль, жить и дышать им. Очень интересно, но пока мне не удалось убедить своих разработчиков и боссов :-( Может, вам повезет больше?