Есть ли система контроля версий для изменения структуры базы данных?

Я часто столкнуться со следующей проблемой.
Я работаю на некоторые изменения в проекте, которые требуют новых таблиц или столбцов в базе данных. Я делаю изменения в базе данных и продолжить работу. Обычно, меня не забудьте записать изменения, так что они могут быть воспроизведены на живые системы. Однако, я не всегда помню, что я изменился и я не всегда помню, чтобы записать его.
Итак, я делаю пуш на живую систему и получите большой, очевидная ошибка, что нет 
```
NewColumnX
```
, тьфу.
Несмотря на то, что это может не быть лучшим решением для такой ситуации, есть ли система контроля версий баз данных? Я не заботятся о конкретной технологии баз данных. Я просто хочу знать, если вы существуете. Если это произойдет для работы с MS SQL сервер, тогда здорово.

Я часто столкнуться со следующей проблемой.
Я работаю на некоторые изменения в проекте, которые требуют новых таблиц или столбцов в базе данных. Я делаю изменения в базе данных и продолжить работу. Обычно, меня не забудьте записать изменения, так что они могут быть воспроизведены на живые системы. Однако, я не всегда помню, что я изменился и я не всегда помню, чтобы записать его.
Итак, я делаю пуш на живую систему и получите большой, очевидная ошибка, что нет 
```
NewColumnX
```
, тьфу.
Несмотря на то, что это может не быть лучшим решением для такой ситуации, есть ли система контроля версий баз данных? Я не заботятся о конкретной технологии баз данных. Я просто хочу знать, если вы существуете. Если это произойдет для работы с MS SQL сервер, тогда здорово.

В Ruby на Rails, есть понятие миграция -- быстрый скрипт для изменения базы данных. Вы генерируете файл миграции, которая имеет свои правила, чтобы увеличить версию БД (например, при добавлении столбца) и правила, чтобы понизить версию (например при удалении столбца). Каждая миграция имеет номер, и таблица отслеживает вашу текущую версию БД. Чтобы мигрировать вверх, вы запускаете команду под названием "дБ:мигрировать", который выглядит в вашей версии и применяет необходимые скрипты. Можно перенести в аналогичную сторону. Миграционные скрипты самих хранятся в системе контроля версий -- всякий раз, когда вы изменяете базу данных, проверить новый скрипт, и любой разработчик может применить его, чтобы привести свои локальные базы данных до последней версии.

Я немного старой школы, в которые я использовать исходные файлы для создания базы данных. На самом деле там 2 файла - проекта-база данных.и проект-обновление SQL.в SQL - первых для схемы и персистирующая данных, а второй для изменений. Конечно, оба находятся под контролем источник.
Когда в базе данных изменений, я сначала обновите основной схемы проекта базы данных.SQL, затем скопировать соответствующую информацию для проекта-обновления.в SQL, например изменение таблицы отчетности.
Тогда я могу применить обновления к базе данных разработка, тестирование, перебирать, пока не сделано хорошо.
Затем проверьте в файлов, раз проверить, и применять для производства.
Кроме того, обычно у меня есть таблица в БД конфигурации - такие, как:
В SQL

```
CREATE TABLE Config
(
    cfg_tag VARCHAR(50),
    cfg_value VARCHAR(100)
);

INSERT INTO Config(cfg_tag, cfg_value) VALUES
( 'db_version', '$Revision: $'),
( 'db_revision', '$Revision: $');

```

Затем я добавить следующий раздел Обновления:

```
UPDATE Config SET cfg_value='$Revision: $' WHERE cfg_tag='db_revision';

```

В 
```
db_version
```
 только изменится, когда база данных создается заново, и 
```
db_revision
```
 дает мне указание, как далеко дБ от базовой линии.
Я мог бы сохранить обновления в отдельные файлы, но я решил соединить их вместе и использовать для того чтобы отрезать

MyBatis (ранее iBatis) есть миграционная схемы, инструмент для использования в командной строке. Он написан на Java, хотя может быть использована с любым проектом. Чтобы добиться хорошего управления изменениями в базе данных практики, мы должны определить несколько ключевых целей. Таким образом, система MyBatis миграции схемы (или MyBatis миграции для краткости) стремится: Работа с любой базой данных, новые или существующие Использовать систему контроля версий (например Subversion) Включить параллельную разработчики или команды, чтобы работать самостоятельно Разрешить конфликты очень заметны и легко управляемым Позвольте для прямой и обратной миграции (развиваться, переходят соответственно) Принять текущее состояние базы данных легко доступны и понятны Включить миграций, несмотря на привилегии доступа или бюрократии Работа с любой методологии Поощряет хорошую, последовательную практику

Редгейт есть продукт под названием Система управления версиями SQL. Он интегрируется с TFS, SVN, не SourceGear хранилище, хранилище про ртутный, волей-неволей, и Git.

Я очень рекомендую Дельта в SQL. Я просто использовать это, чтобы генерировать скрипты дифф, когда я сделал свою функцию кодирования и проверить эти скрипты в мой инструмент управления исходным кодом (ртутный :)) Они оба SQL-сервера

Интересно, что никто не упомянул инструмент с открытым исходным кодом при которой на основе Java и должны работать на почти любой базе данных, которая поддерживает с JDBC. По сравнению с рельсами вместо этого он использует XML в Ruby, чтобы выполнить изменения схемы. Хотя я не люблю XML для конкретных языков домен очень здорово преимуществом XML является то, что при знает, как откатить определенные операции, такие как


Большинство СУБД должна поддерживать сваливая свои базы данных в файл. Я знаю, что MySQL делает, во всяком случае. Это будет просто текстовый файл, так что вы можете представить, что в Subversion, или что вы используете. Было бы легко запустить дифф на файлы тоже.

Если вы используете SQL-сервер, это будет трудно превзойти чувак данных (ака базе версии Visual студии). Как только вы получите повесить ее, делать сравнение схем между источником контролируемой версия базы данных и версия в производства ветерок. И с одним нажатием вы можете создать свой дифф ДДЛ. Есть обучающее видео на сайте MSDN, что очень полезно. Я знаю о DBMS\_METADATA и Жаба, но если кто-то может придумать чувак данных для Oracle, то жизнь будет очень сладкой.

Ваш первоначальный создать таблицы Ведомости в контроллер версии, то добавить изменить таблицу заявления, но не редактировать файлы, только более изменить файлы в идеале им последовательно, или даже в качестве "набора изменений", чтобы вы могли найти все изменения для конкретного развертывания. Самые выносливые части, что я вижу, является отслеживание зависимостей, например, для ввода в таблице B, возможно, потребуется обновить до таблице А.