I’m attempting to bring sanity to an existing system by adding version control. Trouble is the system doesn’t translate well to a filesystem like layout. After several thought experiments I have a rudimentary way to handle this but before I start allowing the usage of this mess I’d like to run it by the collective.
The system consists of typed objects and links.
The objects are linked together with a link table to form meaningful relationships.
The links are also typed objects and can have their own attributes.
Users can arrive at the view of the objects at any level and walk up and down following the links to see the relationships.
Most objects have hundreds of links to other objects.
Not all objects or links will be under version control as some can be considered static.
It is allowed to have a version controlled link to a non version controlled object.
Changes to the objects arrive as a batch containing the entire layout of a section of the heirarchy, with no or mimimal user comments or version information themselves.
Changes are therefore detected by comparison of the new object to the previous one. Link changes are also detected in this way. Objects can be added in one version, removed in the next, and added again in the next. Most objects have enough unique information to detect that this was indeed the same object that was flip-flopping in and out of existance.
Objects and links that do not change should not have a new version created for the individual objects, but the overall content resulting from the batch update should still be identifiable as a group.
95% of users will only be interested in the latest version of the objects/relationships, but I need to be able to show previously committed objects/relationships for the remaining 5%.
My initial thoughts are to implement an overall version uid for the batch of changes and associate it with all of the current objects/links for that iteration. The rest is up for grabs. If you made it this far, thank you. Thoughts?
This sounds like you are describing a (relational) database. Your favorite search engine will give you a number of links for ideas on how to do database versioning.
Two examples for SQL.