План управления версиями базы данных: Hot или нет?

StackOverflow https://stackoverflow.com/questions/4345024

  •  30-09-2019
  •  | 
  •  

Вопрос

На основании чтения в Интернете, переполнение стека и в основном Эти статьи О версии DB, которые были связаны с кодировкой ужаса, я сделал удар при написании плана для версий базы данных 8-летнего PHP MySQL веб-сайта.

Database Version Control plan
- Create a db as the "Master Database"
- Create a table db_version (id, script_name, version_number, author, comment, date_ran)   
- Create baseline script for schema+core data that creates this db from scratch, run this on Master Db
- Create a "test data" script to load any db with working data
- Modifications to the master db are ONLY to be made through the db versioning process
- Ensure everyone developing against the Master Db has a local db created by the baseline script
- Procedures for commiting and updating from the Master Db
    - Master Db Commit
        - Perform a schema diff between your local db and the master db
        - Perform a data diff on core data between your local db and master db
        - If there are changes in either or both cases, combine these changes into an update script
        - Collect the data to be added to a new row in db_version table, and add an insert for this into the script
            - new version number = latest master db version number +1
            - author
            - comment
        - The script must be named as changeScript_V.sql where V is the latest master db version +1
        - Run the script against the master db
        - If the script executed succesfully, add it to the svn repository
        - Add the new db_version record to your local db_version table      
    - Update from Master Db
        - Update your local svn checkout to have all the latest change scripts available
        - compares your local db_version table to the master db_version table to determine which change scripts to run
        - Run the required change scripts in order against your local db, which will also update your local db_version table

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

Это было полезно?

Решение

Глядя на ваши предложения, это не похоже на то, что это возможно, ни практично. Я работал в компании, где мы использовали более 1 тысячи столов на базу данных (очень сложная система), и все это работало нормально, как это:

  • У одного человека, отвечающего за БД (давайте назовем его dbperson) - каждый сценарий / изменение БД должен пройти через него. Это позволит избежать каких-либо ненужных изменений, а некоторые «выпущены» вопросов (например, если кто-то переместит индекс, чтобы лучше выполнить для своего запроса, HI может уничтожить работу других людей, может быть, кто-то создаст таблицу, полностью избыточный и ненужный , так далее...). Это будет сохранять DB чистый и эффективный. Даже если кажется, что это слишком много работы для одного парня (или его заместителя), на самом деле это не - БД обычно редко меняется.
  • Каждый скрипт должен пройти проверку через dbperson
  • Когда скрипт утвержден, DBPerson назначает номер и помещает его в папку «Обновить» папку / SVN (...) с соответствующим нумерацией (как вы предложили, инкрементные числа например).
  • Далее, если у вас есть некоторая постоянная интеграция на месте, сценарий подбирается и обновляет БД (если у вас нет непрерывной интеграции, сделайте это вручную).
  • Не храните все сценарий базы данных, со всеми данными в скрипте. Вместо этого храните фактическую базу данных. Если у вас есть филиалы решения - у каждого отделения с собственной базой данных есть собственная база данных, или вы всегда можете иметь сценарии обновления, разделенные для каждой из ветвей, чтобы вы могли откатиться / вперед в другую ветку. Но я действительно рекомендую иметь отдельную БД для каждой ветви.
  • Имейте одну базу данных всегда с данными по умолчанию (Intact) - для нужд модульных тестов, регрессионных испытаний и т. Д. В любое время вы выполняете тесты, выполните их в копию этой базы данных. Вы могли бы даже поставить ночную очистку тестовых баз данных с основным (если это уместно, конечно).

В такой среде у вас будут несколько версий базы данных:

  • База данных разработчиков (местный) - тот, который использует DEV парень для проверки его работы. Он всегда может скопировать из мастера или тестового мастера.
  • Главная база данных - тот, который со всеми значениями по умолчанию, возможно, полуобеспеченные, если вы делаете переоценки для новых клиентов.
  • База данных Test Master - главная база данных заполнена тестовыми данными. Любые скрипты, которые вы столкнулись с мастером, который вы здесь бежали.
  • Испытание в базе данных прогресса - скопировано из Test Master и используется для тестирования - перезаписывается до любого нового теста.
  • Если у вас есть филиалы (аналогичная база данных с небольшой разницей для каждого из клиентов), чем у вас будет такое же, как указано выше для каждой ветки ...

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top