Давайте пофлудим по теме форума.
Задача:
Есть набор из N разработчиков, работающих над одним проектом.
У всех есть локальный сервер и локальная копия проекта, на которой всё тестируется.
Плюс есть общий тестовый сервер и сервер с уже работающим сайтом.
Изменения, вносимые в код и структуру БД одним из разработчиков, должны синхронизироваться со всеми существующими копиями.
Для синхронизации кода есть SVN и ей подобное.
Что делать с синхронизацией базы?
Нужно следующее:
1. Каждый может легко установить(переустановить) весь проект(его часть) с нуля.
2. Чужие изменения в структуру базы должны вноситься просто и не убивать уже существующие данные.
Вопрос:
Для тех, кто решал подобное - как это делали?
Для тех, кто не решал - как бы сделали?
Наше решение через жопу:
Есть папочка с установочными дампами по разделам - "users.sql" (структуры пользователей), "groups.sql" (структуры групп) и т.д.
Каждый из них полностью устанавливает свой раздел (создаёт все таблицы и начальные данные).
Так как нужна возможность установки поверх уже существующего, каждая CREATE TABLE предваряется DROP TABLE IF EXISTS.
Каталог находится под контролем SVN.
В нём есть подкаталог "/new/" для изменений.
И вот добавляю я в таблицу `users` новое поле - `is_dolboeb`.
Первым делом вношу его в users.sql - установочный дамп должен быть актуальным.
Вторым делом создаю файл /new/090225_vasac.sql:
ALTER TABLE `users` ADD `is_dolboeb` BOOL NOT NULL DEFAULT '0';
Не забываю про DEFAULT, так как изменяться должна таблица с уже имеющимися записями.
Комичу всё это на SVN.
И вот второй разработчик, назовём его условно adw0rd, после недельного пивозапоя решает наконец поработать.
Делает UPDATE с SVN - смотрит, ага, новый файлег, vasa_c на этой неделе что-то изменял. И выполняет все новые файлики по очереди.
Через некоторое время, достаточное для того, чтобы все внесли изменения, файлы из /new/ удаляются чтобы не мешались.