Databases designed and maintained collectively by teams of developers using mostly migration tools and ORMs display certain defining characteristics:
- All columns except for primary keys are nullable.
- No indexes except on primary and maybe foreign keys.
- Lots of bit columns.
- ‘Type’ columns which determine for a row which sets of columns will have data and which will all be null.
- Wide tables with lots of columns.
- Tables and columns named after specific features.
- Very few or no stored procedures, functions, view, or triggers.
- Very few complex queries; lots of simple no-join queries.
- Transactional boundaries are set in code, if anywhere, but are often not explicitly or consistently defined.
Old arguments between developers and DBAs about denormalization seem almost quaint when you think back on them now. Developers don’t even bother with ACID if they’re using NoSQL.
But I have to admit, I’m not sorry to see the backside of triggers. And DBAs and the rest of the database world (to use an indefensibly vague term) were probably too conservative in many cases. That often conflicted with developers. It’s not hard to see whose values are dominating right now.