Как вы управляете схемой базы данных? - PullRequest
119 голосов
/ 06 октября 2008

Как вы готовите свои дельты SQL? Вы вручную сохраняете каждый изменяющий схему SQL в дельта-папку, или у вас есть какой-то автоматизированный процесс сравнения?

Меня интересуют соглашения для управления версиями схемы базы данных вместе с исходным кодом. Возможно хук перед фиксацией, который изменяет схему?

Кроме того, какие опции для различий дельт существуют помимо DbDeploy ?

РЕДАКТИРОВАТЬ: видя ответы, я хотел бы уточнить, что я знаком со стандартной схемой запуска миграции базы данных с использованием дельт. Мой вопрос касается создания самих дельт, желательно автоматически.

Кроме того, управление версиями для PHP и MySQL, если оно имеет значение. (Нет решений на Ruby, пожалуйста).

Ответы [ 17 ]

1 голос
/ 06 октября 2008

Мы экспортируем данные в переносимый формат (используя наш набор инструментов), а затем импортируем их в новую схему. нет необходимости в дельта-SQL. Настоятельно рекомендуется.

1 голос
/ 06 октября 2008

Я использую Firebird базу данных для большинства разработок и использую FlameRobin инструмент администрирования для нее У него есть хорошая возможность записывать все изменения. Он может записывать все в один большой файл или один файл на изменение базы данных. Я использую этот второй вариант, а затем сохраняю каждый скрипт в программном обеспечении для контроля версий - раньше я использовал Subversion, теперь я использую Git.

Полагаю, вы можете найти какой-нибудь инструмент MySQL, который имеет ту же функцию ведения журнала, что и FlameRobin для Firebird.

В одной из таблиц базы данных я храню номер версии структуры базы данных, поэтому я могу легко обновить любую базу данных. Я также написал простой PHP-скрипт, который выполняет эти SQL-скрипты один за другим в любой целевой базе данных (путь к базе данных и имя пользователя / пароль указываются в командной строке).

Существует также возможность регистрировать все операторы DML (вставка, обновление, удаление), и я активирую это, изменяя некоторые данные по умолчанию, содержащиеся в каждой базе данных.

Я написал хорошую белую книгу о том, как я делаю все это подробно. Вы можете скачать документ в формате .pdf вместе с демонстрационными сценариями PHP с здесь .

1 голос
/ 06 октября 2008

Мне тоже интересна эта тема.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * *.

Интересно, что, похоже, CakePHP имеет встроенную версию для управления версиями схемы с помощью команды cake schema generate.

1 голос
/ 06 сентября 2016

для MySQL

Когда я приземляюсь на новой БД:

Во-первых, я проверяю структуру:

mysqldump --no-data --skip-comments --skip-extended-insert -h __DB_HOSTNAME__ -u __DB_USERNAME__ -p __DB1_NAME__ | sed 's/ AUTO_INCREMENT=[0-9]*//g' > FILENAME_1.sql
mysqldump --no-data --skip-comments --skip-extended-insert -h __DB_HOSTNAME__ -u __DB_USERNAME__ -p __DB2_NAME__ | sed 's/ AUTO_INCREMENT=[0-9]*//g' > FILENAME_2.sql
diff FILENAME_1.sql FILENAME_2.sql > DIFF_FILENAME.txt
cat DIFF_FILENAME.txt | less

Благодаря пользователям stackoverflow я мог написать этот быстрый скрипт, чтобы найти структурные различия.

Источник: https://stackoverflow.com/a/8718572/4457531 & https://stackoverflow.com/a/26328331/4457531

На втором шаге я проверяю данные таблица за таблицей с помощью mysqldiff. Это немного архаично, но цикл php, основанный на information_schema данных, делает работу наверняка

Для управления версиями я использую тот же способ, но форматирую скрипт обновления SQL (для обновления или отката) с результатами diff и использую соглашение о номере версии (с несколькими модификациями номер версии выглядит как IP-адрес) .

initial version : 1.0.0
                  ^ ^ ^
                  | | |
structure change: - | |
datas added: -------- |
datas updated: --------
1 голос
/ 29 января 2009

Я также разработал набор сценариев PHP, где разработчики могут отправлять свои сценарии deltasql в центральный репозиторий.

В одной из таблиц базы данных (называемой TBSYNCHRONIZE) я храню номер версии последнего выполненного сценария, поэтому я могу легко обновить любую базу данных, используя веб-интерфейс или клиент, разработанный специально для Eclipse.

Веб-интерфейс позволяет управлять несколькими проектами. Поддерживаются также базы "филиалов".

Вы можете протестировать приложение по адресу http://www.gpu -grid.net / deltasql (если вы входите в систему как администратор с паролем testdbsync). Приложение с открытым исходным кодом и может быть загружено здесь: http://sourceforge.net/projects/deltasql

deltasql продуктивно используется в Швейцарии и Индии и популярен в Японии.

0 голосов
/ 07 апреля 2016

После долгих исследований я выяснил, что есть некоторые сторонние инструменты или типы проектов Visual Studio, которые меня не устраивают, или просто блоги о теории, но без реализации. Поэтому я внедрил работающую систему, которая используется почти год, и объяснил здесь:

http://nalgorithm.com/2015/11/09/database-versioning-part-1/

в зависимости от интереса, продолжу писать еще.

0 голосов
/ 18 июля 2013

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

Вот полная реализация для SQL Server (то же самое решение может быть разработано для MySQL при необходимости): Как поддерживать версию схемы базы данных SQL Server

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...