Instance scope versioning
The most flexible way of creating versions is creating instance scope versions (local versioning). Instance scope versions can be created in order to create an instance history.
Instance scope versioning allows creating new versions for an instance scope whenever required. Instance scope versions are not time-stamped, but one may refer to the instance timestamp in order to locate an instance version by date/time (supposed the instance inherits from system type __OBJECT).
The instance scope is defined by the instance data, collections owned by the instance (but not the referenced instances), MEMO and BLOB references as well as generic attributes. Also extension properties as such belong the the instance scope, but not the instances referenced for e.g. relationship extensions.
Within the instance scope, instance versioning is consistent for all versions. Considering relationships to other instances, consistency is guaranteed for the current version but not for history. Relationship and reference collections as well as string and binary data references belong to the instance scope and will create proper versions, but changes in related instances are usually not reflected properly considering older versions.
Instance scope versioning is supported as simple instance scope versioning (instance) or as managed instance scope versioning (managedInstance), but also in combination with synchronized versioning (synchronizedInstance, managedSynchronizedInstance)
In case of simple local versioning up to 4,294,967,295 versions may be created. In this case, major versions are not created, but the two high order bytes of the version number are formally interpreted as major version.
When combining local with managed versioning, for each major version up to 65,535 minor versions may be created for each instance scope. Minor version numbers are not associated with time stamps.