Контроль версий баз данных
Мне любопытно, есть ли там какие-либо решения, предпочтительно свободные, которые могут иметь центральную базу данных для публикации данных версией.
Например,
Клиент 1 решает изменить профиль лиц, чтобы он вносил изменения в локальную копию на своем компьютере. Когда они довольны редактированием, они публикуют результаты в центральной базе данных. Точно так же, как вы будете делать подачу в perforce.
Клиент 2 пытается отредактировать одну и ту же локальную копию, но при отправке им необходимо разрешить конфликты.
Центральная база данных должна хранить сжатые различия между версиями данных.
В любой момент кто-то может просмотреть все версии представленных данных.
Ответы
Ответ 1
"Управление версиями баз данных" немного неоднозначно для заголовка, потому что вы действительно просите VCS использовать базу данных в качестве хранилища данных "хранилище данных".
Subversion имеет такую модель (Berkeley DB или файловая система).
Он также имеет модель Copy-Modify-Merge, которая похожа на тип механизма блокировки, который вы описываете.
alt text http://svnbook.red-bean.com/nightly/en/images/ch02dia4.png alt text http://svnbook.red-bean.com/nightly/en/images/ch02dia5.png
Ответ 2
Отметьте OffScale DataGrove.
Этот продукт отслеживает изменения всей схемы базы данных и данных. Вы можете пометить версии в любой момент времени и вернуться к более старым состояниям БД с помощью простой команды. Он также позволяет создавать виртуальные, отдельные копии одной и той же базы данных, чтобы каждый член команды мог иметь свою собственную отдельную БД. Все виртуальные копии отслеживаются в один и тот же репозиторий, поэтому очень просто вернуть вашу БД в чужую версию (вы просто проверяете их версию, как и с вашим исходным контролем). Это означает, что все ваши базы данных всегда могут быть синхронизированы.
Отказ от ответственности - я работаю в OffScale: -)
Ответ 3
Инструменты sql из redgate предлагают некоторые из этих функций, но не реализованы так, как вы описываете. Например, сравнение данных sql может сравнивать различия между данными в 2 базах данных и контроль источника sql.
Однако получение копии базы данных на локальном компьютере, внесение изменений и повторная отправка будет более ручным процессом.
Ответ 4
Какой сервер баз данных вы используете? Если вы используете MySQL и PHP, Doctrine имеет поведение "Versionable", которое может быть применено к модели.
Документация по этому поведению находится здесь:
http://www.doctrine-project.org/projects/orm/1.2/docs/manual/behaviors/en#core-behaviors:versionable
Ответ 5
Это именно то, что мой продукт (да, я смещен:)) DBMAestro Teamwork делает.
- Он обеспечивает соблюдение и отслеживание изменений структуры и содержимого.
- Он предотвращает два параллельных изменения структуры объекта или содержимого на два (поскольку они работают на одном и том же объекте - то есть на той же базе данных, на той же схеме,...)
- Он использует базовый анализ, который понимает природу изменения и знает, следует ли продвигать изменение или его следует игнорировать (как это было сделано из другой среды) или если есть конфликт
И многое другое.
Я бы посоветовал вам прочитать всесторонний, беспристрастный обзор решения по управлению базами данных экспертом по базам данных Ben Taylor, который он опубликовал в LinkedIn https://www.linkedin.com/pulse/article/20140907002729-287832-solve-database-change-mangement-with-dbmaestro