Управление версиями базы данных - как работает переключение веток?
Это вопрос для тех из вас, кто работает в команде разработчиков, где у всех вас есть отдельные базы данных. Вы создаете версии своей базы данных, используя систему контроля версий и другие инструменты, которые автоматически обновляют базы данных dev до последней версии базы данных (схема, данные, SP, функции и т. Д.).
Ок, отлично! Но ждать! Что если вы разрабатываете версию программного обеспечения 4.0, но теперь вам нужно переключить ветки на ветку 3.2, чтобы исправить ошибку? Схема может быть (почти наверняка) очень разные сейчас...
Я полагаю, что если вы приложите дополнительные усилия для написания сценариев отката вместе со сценариями изменений, это может сработать. Но это похоже на большую работу - стоит ли это того?
2 ответа
Гораздо проще было бы создать новую базу данных с 3.2-ветвями и работать с ней, работая над кодом с 3.2-ветвями. Мне не кажется разумным требовать, чтобы у каждого разработчика была ровно одна база данных для работы.
Я собираюсь взять конечность и предположить, что вы управляете базой данных как бинарной? Если бы все ваши ресурсы базы данных были в форме конструктивного кода (например, сценарии SQL и / или дампы текстовых данных), решение было бы простым, как предложил Марк: хранить эти активы как часть ветви разработки. Для работы над версией 3.2 переключите ветку, перезапустите базу данных create scripts и presto, 3.2. Объединение будет таким же простым, как с обычным кодом (или столь же болезненным, в зависимости от выбранной вами системы контроля версий).
Вот несколько советов для работы в этом режиме:
- Если создание экземпляров базы данных из текста выполняется слишком медленно, создайте кэш на томе общего диска, на который указывает содержимое всех файлов схемы / данных (или их сумма MD5).
- Напишите хук предварительной фиксации, чтобы убедиться, что схема и дампы данных в экземпляре разработчика совпадают с теми, которые находятся под управлением версиями. Это не позволяет людям вносить изменения в свою базу данных разработчиков с помощью интерактивного инструмента, а затем забывает зафиксировать их.
- Вы упоминаете сценарии изменения; относиться к ним как к ответственности. Хотя они могут потребоваться в вашем сценарии развертывания (например, для клиентов, которые хотят выполнить обновление на месте), они дублируют информацию из истории версий базы данных, и в соответствии с законодательством Мерфи рано или поздно означает десинхронизацию. Попробуйте автоматически сгенерировать сценарии изменений из версионных ресурсов базы данных, используя "diff"; или, если это невозможно, посвятите несколько серьезных юнит-тестов обновлению базы данных.