Having rigid definitions for data types doesn&#x27;t necessarily mean the datastore is rigid.  It just means that you know what type of data goes in each column.  Like it or not, if you change your schema that change has to be handled somewhere - either you update the old data to the new schema (do this), or you handle old versions of the schema in the application (fundamentally non-scalable IMO).  It doesn&#x27;t matter whether they&#x27;re values in a JSON object or columns in a relational DB.<p>Flyway is a fantastic tool for making changes to relational schemas.  Your code is versioned, and you can just keep the schema migration scripts right next to it.  If you need to upgrade an old schema, it just walks through the migration scripts until it&#x27;s up-to-date.<p>If there is some portion of your model that really, truly, honestly consists of unstructured data, you can just put that in a JSON column.