Как управлять изменениями в базе данных нескольких разработчиков? - PullRequest
13 голосов
/ 29 марта 2010

У нас есть три разработчика и один тестер, работающие с одной и той же базой данных. Мы меняем схему базы данных довольно часто, и каждый раз, когда мы делаем это, она имеет волновой эффект от головной боли для всех остальных.

Существуют ли передовые практики для ориентированной на .NET разработки под MS SQL Server 2008 для управления этим? Я думаю о чем-то похожем на Rails Migrations, и у каждого разработчика и тестера есть своя локальная база данных. Или это перебор? По крайней мере, было бы неплохо иметь отдельные базы данных test и dev, но в настоящее время синхронизация двух баз данных вручную, вероятно, хуже нашей нынешней ситуации.

LiquiBase кажется многообещающим, кто-нибудь успешно использовал его в аналогичной среде? Или есть лучшие подходы?

Мы используем SQL Server 2008, VS 2008 и .NET 3.5, если это вообще имеет значение.

Ответы [ 7 ]

4 голосов
/ 29 марта 2010

У нас есть скрипты для генерации БД с нуля, и это то, что находится в системе контроля версий. Каждый разработчик (20 из них) использует скрипт для создания 2 баз данных на своих рабочих станциях. Один для «работы» - ручное тестирование с образцами данных в нем (есть скрипт для заполнения образцов данных). Другая БД пуста и используется в модульных тестах (открытая транзакция - выполнить модульное тестирование - откат).

Модульный тест обязателен в среде с несколькими разработчиками. Также мы всегда строим «старую» базу данных и применяем к ней изменения схемы. Каждый разработчик меняет схему, создавая процедуры обновления (именно так мы перестраиваем и обновляем готово одновременно).

Для тестирования производительности у нас есть «загрузчики» - код C # для имитации пользователей и заполнения миллионов записей за ночь на рабочих станциях разработчиков.

3 голосов
/ 29 марта 2010

Мы не используем инструмент как таковой, но мы сохраняем всю нашу схему под контролем исходного кода, а затем имеем скрипт, который будет обновлять или перестраивать базу данных из исходного кода. Таким образом, когда внесены изменения, мы можем все обновляться и оставаться в синхронизации. Это просто становится частью ежедневной утренней рутины, занимает около 5 минут, как синхронизация вашего кода. Это не идеально, но у нас это работает.

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

Надеюсь, это поможет.

1 голос
/ 29 марта 2010

Я нахожусь в лагере "одна база данных разработки".

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

Это не значит, что она не должна находиться под контролем исходного кода, потому что она должна.

В конечном итоге, поскольку у вас больше разработчикови больше каналов связи: вы хотите, чтобы изменения базы данных проходили через администратора базы данных - это позволяет координировать изменения и избегает многих проблем с каналами связи в команде - это превращает каналы связи в звезду.

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

Через определенное времяВ процессе разработки изменения базы данных становятся довольно управляемыми, поскольку изменений в базовой схеме базовой таблицы меньше (хотя представления и хранимые процедуры могут оставаться нестабильными).

1 голос
/ 29 марта 2010

Хорошая ссылка на несколько хороших ссылок: http://www.codinghorror.com/blog/2008/02/get-your-database-under-version-control.html

1 голос
/ 29 марта 2010

Visual Studio Team System Database Edition (также известный как «Data Dude»), стоит посмотреть. Он может отслеживать различия в базе данных и генерировать сценарии изменений, чтобы вы могли подготовить среду тестирования / разработки до развертывания и т. Д. Я думаю, что ее функции также доступны в выпуске для разработчиков (см. Предыдущую ссылку) и в VS 2010 будут более заметными. Посмотрите на это сообщение в блоге: Первый опыт работы с Visual Studio 2008 Database Edition, мне это нравится !!!

Это, наряду с TFS, дает возможность контроля версий файлов SQL и запуска их для базы данных.

0 голосов
/ 29 марта 2010

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

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

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

Вместо этого я думаю, что гораздо лучше иметь собственные базы данных dev / test, которые вы можете обновлять каждый. Затем создайте сервер непрерывной интеграции, который автоматически извлекает последний код из системы контроля версий и создает его каждые x часов.

0 голосов
/ 29 марта 2010

Звучит так, будто вам нужен инструмент diff для базы данных, чтобы создавать и хранить изменения в вашей базе данных ...

Red Gate SQL Сравнить

Редакция базы данных Visual Studio Team

...