I have one niggle on schema-less. The fact is, the database probably shouldn't care about the shape/schema of the data in some cases. That's what application logic is for. If you want to support multiple payment gateways, do you <i>REALLY</i> want to create a half dozen or more connected tables to store the transaction details? Oh, this table is for transactions from Paypal. This one is for Authorize.Net. Or add a Transactions table with the common bits as typed columns and a json field NVARCHAR(MAX)?<p>There are times to pragmatically make choices. Joins, and subqueries have costs, and they become more so at scale. In the end it's frustrating to have to debate/fight for a simpler solution because the lessons and positive points of the last decade were never learned.