План управления версиями базы данных: Hot или нет?
-
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 для всей базы данных неверно с точки зрения ремонтопригодности, объединения, обновления и т. Д.