Мы используем собственное решение для БД, которое предоставляет все инструменты, необходимые для правильного управления версиями БД.Хотя я понимаю, что это не может быть идеальным решением для всех, я приглашаю вас взглянуть на него (он с открытым исходным кодом): bsn ModuleStore
Аспект управления версиями таков:Следующее: инструмент может полуавтоматически писать сценарии SQL и переформатирует исходный код в единый формат.Поэтому файлы всегда будут идентичны для одного и того же источника, независимо от того, когда и кем что-то было написано;поэтому это прекрасно работает с неблокирующими системами контроля версий (особенно SVN, Git или Mercurial).
Переформатирование переводит все операторы в одну форму (например, необязательные ключевые слова, такие как AS
, INNER
, OUTER
и т. Д.), Записывает все в схему "dbo" (даже если она в другой), помещает все идентификаторы в квадратные скобки ([something]
), ставит все зарезервированные слова в верхний регистр, делает отступ и т.д..
Помимо управления версиями, часть времени выполнения инструмента может различать работающую БД и сценарии CREATE (исходный код БД) и автоматически применять обновления для всех неразрушающих изменений (например, обновление индексов, ограничений, представлений, сохраненных данных).процедуры, триггеры, пользовательские типы, новые таблицы и т. д.).Разрушающие изменения должны быть записаны вручную (изменения таблицы, которые обычно требуют преобразования данных).Среда выполнения гарантирует, что все обновления выполняются в транзакции и откате, если получающаяся БД не соответствует сценариям CREATE, поэтому вы можете быть уверены, что БД точно соответствует версии, требуемой приложением, даже если онабыл изменен вручную.
Кроме того, несколько «модулей» могут быть использованы в одной базе данных.Каждый модуль хранится в виде схемы и не зависит от других схем, что позволяет добавлять или удалять модули из одной БД и избегать необходимости создания нескольких баз данных для разных частей приложения.Кроме того, использование схем для этого гарантирует отсутствие конфликтов имен.
Возможно, стоит отметить, что набор инструментов не зависит от SMO, он автономен.