David
David

Reputation: 151

Version control of databases

I am curious if there are any solutions out there, preferably free, that can have a central database to publish data to in a versioned manner.

For example,

Client 1 decides to edit a persons profile so it gets a local copy on its machine to make changes to. When they are happy with there edit they publish the results to the central database. Just like how you would do a submit in perforce.

Client 2 tries to edit the same local copy but when they go to submit they have to resolve conflicts.

The central database must store compressed differences between versions of the data.

At any point someone can look at all versions of the data submitted.

Upvotes: 15

Views: 749

Answers (5)

VonC
VonC

Reputation: 1323075

"Version control of databases" is a bit ambiguous for a title, because you are actually asking for a VCS using a database as repository "data store".

Subversion has such a model (either Berkeley DB or filesystem-based).
It also has a Copy-Modify-Merge model which is similar to the kind of locking mechanism you are describing.

alt text
(source: red-bean.com)
alt text
(source: red-bean.com)

Upvotes: 3

Uri
Uri

Reputation: 190

This is exactly what my product (yes I'm biased :)) DBmaestro Teamwork does.

  • It enforces and keep track on the changes of structure and content
  • It prevents two parallel changes on an object structure or content by two (as long they work on the same object - meaning, same database, same schema, ...)
  • It uses a baseline aware analysis which understand the nature of the change and knows if the change should be promoted or should be ignored (as it was made from another environment) or if there is a conflict And much more…

I would encourage you to read a comprehensive, unbiased review on Database Enforced Management Solution by veteran Database expert Ben Taylor which he posted on LinkedIn https://www.linkedin.com/pulse/article/20140907002729-287832-solve-database-change-mangement-with-dbmaestro

Upvotes: 0

Taichman
Taichman

Reputation: 1118

Check out OffScale DataGrove.

This product tracks changes to the entire DB - schema and data. You can tag versions in any point in time, and return to older states of the DB with a simple command. It also allows you to create virtual, separate, copies of the same database so each team member can have his own separate DB. All the virtual copies are tracked into the same repository so it's super-easy to revert your DB to someone else's version (you simply check-out their version, just like you do with your source control). This means all your DBs can always be synchronized.

Disclaimer - I work at OffScale :-)

Upvotes: 3

Symen Timmermans
Symen Timmermans

Reputation: 907

What database server are you using? If you are using MySQL and PHP, Doctrine has 'Versionable' behavior which can be applied to a model.

The documentation on this behavior is here:
http://www.doctrine-project.org/projects/orm/1.2/docs/manual/behaviors/en#core-behaviors:versionable

Upvotes: 1

David_001
David_001

Reputation: 5802

The sql tools from redgate sort of offer some of this functionality, but not implemented in a way you describe. For example, sql data compare can compare the differences between data in 2 databases, and sql source control can be used as well.

However, getting a copy of the database on a local machine, making changes and resubmitting would be more of a manual process.

Upvotes: 2

Related Questions