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

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

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

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

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

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

Ответы [ 17 ]

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

См

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

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

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

Получить вашу базу данных под контролем версий

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

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

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

4 голосов
/ 25 октября 2010

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

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

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

В настоящее время он поддерживает Oracle, MySql и PostgreSql и находится в Java, поэтому продукт работает на Windows, Linux и Mac.

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

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

3 голосов
/ 16 июля 2015

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

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

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

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

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

2 голосов
/ 02 июля 2010

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

2 голосов
/ 01 января 2009

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

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

Планируется поддержка помещения скриптов обновления в систему управления версиями.

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

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

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

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

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

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

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

1 голос
/ 18 ноября 2011
1 голос
/ 08 июля 2010

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

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

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

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

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

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

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

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