Some people argue that Semantic Versioning fails to deliver. Why they expect miracles, I’m not sure. Other people propose entirely new schemes for schemas, because they want to get some different meanings out of their versioning system.

My current approach:

  • Using SemVer gives you compatibility, feature and build information that you would otherwise not get; it may not be absolutely precise to use these big buckets, but having them is good
  • Using SemVer for schemas works for me, in this way:
    • to represent database incompatibility, bump the major version (“don’t fear the major bump”)
    • to represent the need for a database upgrade, bump the minor version
    • perk #1: database upgrades can be completely driven by just the minor version (major versions must match, of course, but patch can be ignored)
    • fallout #1: you MUST consider dbs with older major versions to be incompatible, even if the major bump was not db related
    • fallout #2: you MUST run an upgrade on databases with older minor versions, even if the minor bump was not db related; the upgrade will simply update the internal db version

Works for me.  Upwards.