Как вы работаете с изменениями схемы базы данных в команде разработчиков?

вот более общий вопрос о том, как вы обрабатываете изменения схемы базы данных в команде разработчиков.

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

Каждый раз, когда один из нас решает, что пришло время расширить / изменить схему базы данных, мы отправляем файлы базы данных (MYI / MYD) или файлы SQL для выполнения или даем другим инструкции по телефону, что им нужно сделать, чтобы получить измененный код. работает на своих локальных БД. Это точно не лучший подход. Та же проблема возникает, когда нам нужно настроить схему БД на стадии подготовки или производства после того, как новый выпуск будет готов.

Мне было интересно ... как вы, ребята, справляетесь с такими вещами? В качестве исходного кода мы используем SVN.

Очень ценю ваш вклад!

Спасибо Майкл


person Community    schedule 23.09.2009    source источник
comment
Повторить вопрос? stackoverflow .com / questions / 778317 /.   -  person Jon Seigel    schedule 23.09.2009


Ответы (6)


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

person Harper Shelby    schedule 23.09.2009
comment
Я использовал эту технику в нескольких местах, и она хорошо работает. Как правило, это полностью технологически независимый метод. Я также видел базовые сценарии загрузки данных, управляемые таким же образом, поэтому удаленный разработчик мог загрузить DDL и сценарий загрузки и иметь текущую базу данных с загрузкой данных известного состояния, готовую к использованию, практически без усилий. - person DaveE; 23.09.2009
comment
Мы тоже это делаем (хотя мы используем TFS вместо SVN). Я люблю хранить скрипты в системе контроля версий, потому что теперь вы можете отслеживать историю изменений! Нет ничего приятнее, чем связать ветку или метку с определенным набором скриптов БД. - person Joshua; 23.09.2009

По крайней мере, у вас должны быть сценарии всех объектов в базе данных (таблицы, хранимые процедуры и т. Д.) Под контролем версий.

Я не думаю, что изменение схемы рассылки - реальный вариант для профессиональной команды разработчиков.

person Santiago Cepas    schedule 23.09.2009

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

Ночная сборка приложения включала сборку базы данных (SQL Server). База данных построена на сервере Test DB. Затем у каждого разработчика был пакет DTS (это было некоторое время назад, и я уверен, что они перешли на пакеты SSIS), чтобы загрузить эту ночную сборку БД в свою локальную среду БД.

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

person Justin Niessner    schedule 23.09.2009

В моей работе мы имеем дело с довольно большими базами данных, создание которых требует много времени, поэтому для нас начинать с нуля с новой БД не идеально. Как и у Харпера, у нас есть DDL в SVN. Кроме того, мы храним номер версии в таблице базы данных. Каждая регистрация, которая изменяет БД, должна сопровождаться сценарием, который:

  1. Обновит схему базы данных и соответствующим образом изменит любые существующие данные, а также
  2. Обновит номер версии в базе.

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

Таким образом, если у меня есть копия БД клиента объемом 4 ГБ, которая относится к версии годичной давности, и я хочу проверить, как их данные будут работать с версией, которую мы вырезали вчера, я могу просто запустить наш скрипт и позволить ему скорее выполнять обновления. чем необходимость начинать с нуля и повторять каждую операцию INSERT, UPDATE и DELETE, выполняемую с момента создания базы данных.

person Robert Gowland    schedule 23.09.2009

У нас есть не-SQL описание схемы базы данных. Когда приложение запускается, оно сравнивает желаемую схему базы данных с фактической схемой базы данных и выполняет все инструкции ADD TABLE, ADD COLUMN, ADD INDEX и т. Д., Которые ему необходимы, чтобы база данных выглядела правильно.

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

person Kristopher Johnson    schedule 23.09.2009

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

В моей текущей работе каждый раз, когда происходит изменение схемы, мы пишем SQL для изменения (alter table xyz add column ...) и помещаем его в SVN. Затем разработчики могут обновить тестовые базы данных, запустив этот скрипт. Это довольно коряво, но работает.

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

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

person Jay    schedule 23.09.2009