Базы данных и DVCS - PullRequest
       32

Базы данных и DVCS

2 голосов
/ 21 декабря 2009

Я недавно задал вопрос о том, насколько DVCS подходит для корпоративной среды, и это вызвало еще один вопрос для меня.

Одна из положительных сторон DVCS заключается в том, что вы можете легко переходить и пробовать новые вещи. Моя проблема начинается, когда я начинаю думать об изменениях базы данных. Мне всегда было сложно вводить БД в VCS, и кажется, что с DVCS будет еще сложнее.

Итак, как лучше всего работать с базами данных и DVCS?

РЕДАКТИРОВАТЬ: Я начал изучать Migrator.NET. Что люди думают о подобных проектах, чтобы легко перемещаться между версиями, в частности с экспериментальными ветками в вашей DVCS?

Ответы [ 4 ]

2 голосов
/ 21 декабря 2009

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

Вот некоторые из доступных вариантов:

  • Миграции фреймворк в Ruby on Rails.
  • Юг для Django, в дополнение к схеме, определяемой в самих модельных классах.
  • Visual Studio 2008 Team System Database Edition для .NET: вы определяете схему, и инструмент может выполнять различие в схеме и данных для генерации сценариев для перехода между различными версиями базы данных.

Это может дать вам некоторое представление о том, как справиться с переводом базы данных в систему управления версиями. Другое преимущество, которое возникает при работе со схемами, заключается в том, что вы можете с большей готовностью реализовать TDD и Continuous Integration (CI). Ваша среда TDD / CI сможет создать новую версию базы данных и затем выполнить тесты для вновь созданной среды.

1 голос
/ 21 декабря 2009

Версия всех сценариев, которые вы используете для управления вашей базой данных. Если вам нужно внести изменения в БД в процессе разработки, вносите их в свою личную БД до тех пор, пока вы не «опубликуете» свои изменения.

0 голосов
/ 22 декабря 2009

Лучший способ не помещать базу данных в VCS в двоичном виде. Период.

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

0 голосов
/ 21 декабря 2009

Управление версиями базы данных всегда самая сложная вещь в среде с несколькими разработчиками.

Обычно каждый пользователь имеет свою собственную БД, которая является химерой некоторых, но не всех изменений БД. Когда они вносят изменения, им нужно будет зафиксировать свои сценарии изменений. Это становится действительно неловким. Основные проблемы, как представляется, связаны с изменениями базы данных, затрагивающими многие аспекты системы, а также с несколькими изменениями таблиц, зависящими друг от друга, а также с тем, как перейти на новую схему из старой схемы. Перенос данных в новую схему обычно нетривиален. Часто вы хотите по умолчанию столбец, когда данные копируются в новую схему, но НЕ по умолчанию, скажем, столбец по умолчанию для INSERT. Как правило, они уже сложны в вопросах производственного развертывания, и им приходится управлять базой данных во время разработки, когда проектирование базы данных может происходить так же быстро, как и основное развертывание, - это гораздо больше работы, чем обычно требуется при разработке. Время, которое лучше потратить, чтобы убедиться, что ваша база данных хорошо спроектирована - ограничения, внешние ключи и т. Д.

Поскольку разработчики с большей вероятностью наступают друг на друга с изменениями в базе данных, у нас всегда была точка доступа к базе данных - все разработчики разработали против той же самой базы данных разработки и сделали свои изменения «живыми». Затем база данных dev контролировалась версией независимо. Это не очень легко, когда люди находятся вне офиса или что-то в этом роде. Другая альтернатива - назначить разработчиков баз данных, которые координируют изменения, необходимые нескольким разработчикам, в одной таблице - это не обязательно должно быть всей их работой, но обеспечивает лучшую согласованность дизайна БД. Или вы можете координировать ревизии базы данных, чтобы люди больше знали о ревизиях БД, которые делают другие люди, и планировали свои изменения, чтобы дождаться, когда ревизия БД станет доступной от другого разработчика.

...