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



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

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

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

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

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

198   17  

17 ответов:

посмотреть

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

как мне версировать мою базу данных MS SQL в SVN?

и статья Джеффа

Получить Базу Данных Под Контролем Версий

Я чувствую твою боль, и я хочу, чтобы был лучший ответ. Это может быть ближе к тому, что вы искали.

механизмы отслеживания схемы БД изменения

вообще, я чувствую, что нет адекватного, принятого решения для этого, и я катаю свой собственный в этой области.

вы можете взглянуть на другой, похожие темы: Как мне версировать мою базу данных MS SQL в SVN?.

Если вы все еще ищете варианты : посмотрите на neXtep designer. Это бесплатная среда разработки баз данных GPL, основанная на концепциях управления версиями. В среде вы всегда работаете с версионными сущностями и можете сосредоточиться на разработке модели данных. После того, как выпуск будет выполнен, механизм генерации SQL, подключенный к системе управления версиями, может генерировать любую дельту, которая вам нужна между двумя версиями, и предложит вам некоторый механизм доставки, если вам нужно.

среди кроме того, вы можете синхронизировать и реверсивно синхронизировать свою базу данных во время разработки, создавать диаграммы моделей данных, запрашивать базу данных с помощью интегрированных клиентов SQL и т. д.

посмотреть в вики для получения дополнительной информации : http://www.nextep-softwares.com/wiki

в настоящее время он поддерживает Oracle, MySql и PostgreSql и находится в java, поэтому продукт работает на windows, linux и mac.

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

когда приходит время обновить существующую базу данных у меня есть программа, которая использует сценарий сборки на основе XML для создания новой базы данных и голых таблиц. Затем я копирую данные из старой базы данных, используя INSERT INTO x SELECT FROM y, а затем применяю все индексы, ограничения и триггеры.

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

Я бы не рекомендовал это решение для базы данных с огромным количеством данных, но я регулярно обновляю базу данных, которая превышает 1 ГБ С 400 таблицами.

вы не упомянули, какие СУБД вы используете, но если это MS SQL Server, Red-Gate SQL Compare был незаменим для нас в создании дельт между сценариями создания объектов.

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

этот инструмент называется Бразилия и теперь с открытым исходным кодом под лицензией MIT. Бразилия ruby / ruby on rails основана и поддерживает развертывание изменений в любой базе данных, которая Ruby DBI поддержка (MySQL, ODBC, Oracle, Postgres, SQLite).

поддержка установки сценариев обновления в систему управления версиями спланированный.

http://bitbucket.org/idler/mmp - инструмент управления версиями схемы для mysql, написанный на PHP

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

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

сценарий миграции выполняется при каждом обновлении производственного кода и после новых установок.

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

и, конечно, я выполняю DDLs через эти скрипты и никогда непосредственно в базе данных, чтобы держать вещи в синхронизации.

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

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

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

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

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

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

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

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

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

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

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

несколько месяцев назад я искал инструмент для управления версиями схемы MySQL. Я нашел много полезных инструментов, таких как миграция доктрины, миграция RoR, некоторые инструменты, написанные на Java и Python.

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

мои требования:

  1. нет требований, исключить PHP и MySQL
  2. нет файлов конфигурации схемы, как схемы.yml в доктрине
  3. возможность читать текущую схему из подключения и создавать новые сценарий миграции, чем представляют идентичную схему в других установках приложения.

Я начал писать мой инструмент миграции, и сегодня у меня есть бета-версия.

пожалуйста, попробуйте его, если у вас есть интерес к этой теме. Пожалуйста, пришлите мне будущие запросы и багрепорты.

исходный код: bitbucket.org/idler/mmp/src Обзор на английском языке: bitbucket.org/idler/mmp/wiki/Home Обзор на русском языке: antonoff.info/development/mysql-migration-with-php-project

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

здесь некоторые обсуждения на эту тему в Django wiki.

интересно, это выглядит как CakePHP имеет встроенную схему управления версиями через просто .

Для 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 я мог бы написать этот быстрый скрипт, чтобы найти различия в структуре.

src: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: --------

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

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

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

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

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

    Ничего не найдено.

Добавить ответ:
Отменить.