Я знаю, что миграция — это один из способов контроля версий в схеме базы данных. Однако, поскольку у меня есть база данных, которая используется несколькими проектами, каждый проект может немного изменить схему. Итак, мне нужно что-то вроде функции ветвления и слияния, например, git для кодов, где миграция не может дать такую функцию. Итак, есть ли инструменты контроля версий специально для базы данных?
Мы используем php с laravel и mysql для базы данных и готовы переключиться на postgresql, если это необходимо.
Вы можете настроить все ваши настройки .sql
файлы в репозитории git для проекта. Поскольку вы упомянули, что многие проекты используют эту базу данных, было бы разумно использовать один репозиторий исключительно для базы данных:
Учтите, что следующим каталогом управляет git:
setup.php
setup/
----- Create_database.sql
----- Create_users_table.sql
----- Create_posts_table.sql
----- Create_some_view.sql
setup.php
Теперь можно использовать для выполнения всех .sql
файлы в каталоге установки, чтобы сделать базу данных проще для развертывания / клонирования. Когда вам нужно внести изменения в вашу базу данных, просто используйте функции, уже встроенные в git, для ветвления и объединения изменений в этот репозиторий.
dbv.php это приложение для управления версиями базы данных, которое вы можете использовать Вот это статья Sitepoint о том, как ее использовать.
Как упомянуто выше, есть много инструментов предприятия. Лично я пошел на создание своего собственного. Я использую API dbdeploy.
Это работает: напишите ваши инкрементные сценарии
1_c_table_t.sql
2_c_uk_index_t.sql
…
Требуется таблица в базе данных, где хранятся все номера файлов. После успешной вставки sql он выполняет вставку в таблицу версий.
Над этим работают несколько команд, я создаю репозиторий в github, и все репозитории разработчиков зависят от этого. API использует первую цифру для идентификации сценария.
Спасибо
Вы могли бы попробовать Phinx В настоящее время я использую dbv.php, как упоминалось в другом ответе, но у Phinx, похоже, есть более продвинутые опции, которые могут помочь вам в достижении ваших целей. Там документацию можно найти здесь http://docs.phinx.org/en/latest/ и есть пример прохождения проекта автором Вот
Я работал в компании, у которой были зацепки на нашем сервере управления исходным кодом, который при коммите выполнял скрипт, который по своей сути создавал дамп схемы mysql из наших баз данных разработки и промежуточных данных и из различий между этими схемами. создаст сценарий sql, который при запуске позволит изменить третью базу данных (копию промежуточного уровня) для создания базы данных с той же схемой, что и у dev, но содержащей все данные промежуточного уровня. Затем он впоследствии запустит все тесты и, если они пройдут успешно, представит дельта-скрипт sql как безопасный для запуска на производстве.
Пока у вас есть событие, в этот момент вы можете запустить скрипт, вы можете аналогичным образом сгенерировать скрипт sql, который перемещает схему вперед к новой дельте.
Альтернативой было бы просто отслеживать схему sql в управлении версиями при каждом изменении, но тогда это означало бы, что для работы потребовался бы человек (из унифицированного diff), какой sql понадобился бы для реализации изменения ,
Ответ прост. Просто используйте .sql
файл, который определяет схему БД. Разветвите и измените файл .sql для вас, если это необходимо. Вы можете указать все, что вам нужно, например, создание базы данных и таблиц.
Если вам нужно с чего-то начать, вы можете сделать mysqldump
на вашем БД и начните с этого. После того, как у вас есть файл в ветке управления исходным кодом, слияние сразу после этого.
Другой вариант — создать базовый дамп базы данных, а затем использовать различные сценарии изменения, которые могут настроить базу данных в соответствии с вашими потребностями. Пусть разные проекты загрузят дамп базы данных, затем примените подходящие сценарии.
Используя такой инструмент, как Phinx, вы можете иметь гораздо больше возможностей и возможностей. Ссылка на репозиторий github https://github.com/robmorgan/phinx